diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
index d4e48a10..f70492f4 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
@@ -23,7 +23,7 @@ public class TrackDeleteEventHandler: ITransientDependency, ICapSubscribe
_capPublisher = capPublisher;
}
- [CapSubscribe(GlobalConst.TrackUpsertSubscribe)]
+ [CapSubscribe(GlobalConst.TrackDeleteSubscribe)]
public async Task ConsumerAsync(TrackDeleteEvent @event)
{
// 不同子系统需要做内容映射
diff --git a/src/SJZY.Track.Application/SJZY.Track.Application.csproj b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
index 1e027d10..d2b2eafd 100644
--- a/src/SJZY.Track.Application/SJZY.Track.Application.csproj
+++ b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
@@ -13,6 +13,10 @@
+
+
+
+
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs
index 50490d04..73c08dd9 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs
@@ -8,6 +8,7 @@ namespace SJZY.Track.Application.Services.ProvideServices;
/// 订单关联服务
///
[ApiExplorerSettings(GroupName = "提供接口")]
+[Route("/ProviderService")]
public class OrderLinkService : ApplicationService
{
private readonly IOrderRepository _orderRepository;
@@ -34,6 +35,12 @@ public class OrderLinkService : ApplicationService
throw new BusinessException(message: $"订单:{input.OrderNo}不存在");
}
+ //todo:循环关联?
+ if (input.OrderType == input.LinkOrderType)
+ {
+ throw new BusinessException(message: "不能同级关联");
+ }
+
if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return true;
// 单号去重
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
index aaf59008..42c94f23 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
@@ -2,7 +2,6 @@
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Dtos.Order;
-using Volo.Abp.ObjectMapping;
namespace SJZY.Track.Application.Services.ProvideServices;
@@ -10,6 +9,7 @@ namespace SJZY.Track.Application.Services.ProvideServices;
/// 订单服务
///
[ApiExplorerSettings(GroupName = "提供接口")]
+[Route("/ProviderService")]
public class OrderService : ApplicationService
{
private readonly IOrderRepository _orderRepository;
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
index 07dd84d3..53cdfd57 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
@@ -9,6 +9,7 @@ namespace SJZY.Track.Application.Services.ProvideServices;
/// 轨迹拉取服务
///
[ApiExplorerSettings(GroupName = "提供接口")]
+[Route("/ProviderService")]
public class TrackPullService : ApplicationService
{
private readonly IOrderRepository _orderRepository;
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
index 5474a9be..f2b5320f 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
@@ -4,6 +4,7 @@
/// 轨迹推送服务
///
[ApiExplorerSettings(GroupName = "提供接口")]
+[Route("/ProviderService")]
public class TrackPushService: ApplicationService
{
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs
index aa554a9a..96bb5de5 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs
@@ -10,6 +10,7 @@ namespace SJZY.Track.Application.Services.ProvideServices;
/// 轨迹查询服务
///
[ApiExplorerSettings(GroupName = "提供接口")]
+[Route("/ProviderService")]
public class TrackQueryService : ApplicationService
{
private readonly ITrackDetailsRepository _trackDetailsRepository;
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
index 9fdbb37e..18adf7fa 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
@@ -10,6 +10,7 @@ namespace SJZY.Track.Application.Services.ProvideServices;
/// 轨迹服务
///
[ApiExplorerSettings(GroupName = "提供接口")]
+[Route("/ProviderService")]
public class TrackService : ApplicationService
{
private readonly IOrderRepository _orderRepository;
@@ -85,7 +86,7 @@ public class TrackService : ApplicationService
TrackCodes = codes,
SubSystemId = order.SubSystemId,
};
- await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event);
+ await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, @event);
return true;
}
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index 2e4e0454..2bea18a6 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -1,4 +1,7 @@
-using SJZY.Expand.ABP.Core.Localization;
+using DotNetCore.CAP;
+using Microsoft.Extensions.Configuration;
+using SJZY.Expand.ABP.Core.Localization;
+using SJZY.Expand.ABP.Core.Logger;
using SJZY.InterfaceRelay.Application.Contracts;
using SJZY.Track.Application.Contract;
using SJZY.Track.Application.Localization;
@@ -67,19 +70,41 @@ namespace SJZY.Track.Application
remoteServiceConfigurationName: "InterfaceForward",
asDefaultService: false
);
+
+ //CAP
+ context.Services.AddCapTableNameService();
+ context.Services.AddCap(options =>
+ {
+ options.UseMySql(configuration["ConnectionStrings:DefaultConnection"]!);
+ options.UseRabbitMQ(configure =>
+ {
+ configure.HostName = configuration["RabbitMQ:HostName"]!;
+ configure.UserName = configuration["RabbitMQ:UserName"]!;
+ configure.Password = configuration["RabbitMQ:Password"]!;
+ configure.Port = configuration.GetValue("RabbitMQ:Port");
+ });
+ options.FailedRetryInterval = 60;
+ options.FailedRetryCount = 10;
+ options.UseDashboard(dashboardOptions =>
+ {
+ dashboardOptions.PathBase = System.Diagnostics.Debugger.IsAttached ? "" : configuration["Swagger:JsonUrlPrefix"];
+ });
+ options.FailedThresholdCallback = faileCalback =>
+ {
+ LogHelper.Error($@"{faileCalback.MessageType} 失败了,消息名称: {faileCalback.Message}");
+ };
+ });
}
public override void PreConfigureServices(ServiceConfigurationContext context)
{
- var configuration = context.Services.GetConfiguration();
PreConfigure(options =>
{
- options.ProxyClientActions.Add(async (remoteName, serviceProvider, httpClient) =>
+ options.ProxyClientActions.Add((_, _, httpClient) =>
{
//如果设置Token,前端需要传入Token 否则引发异常
httpClient.SetTokenHeader();
httpClient.Timeout = TimeSpan.FromMinutes(3);
- await Task.CompletedTask;
});
});
}
diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs
index e039c01e..9e8d59eb 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs
@@ -9,9 +9,7 @@ public interface IOrderRepository : IBasicRepository
///
///
///
- Task CreateOrderAsync(OrderEntity order);
-
- //Task> GetOrderDetails(GetOrderDetailsInputVO input);
+ Task CreateOrderAsync(OrderEntity order);
///
/// 获取分页的轨迹订单
diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
index e21d6a04..04432d30 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
@@ -114,9 +114,8 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
[SugarColumn(ColumnName = "LeavePort")]
public string? LeavePort { get; set; }
- [Navigate(NavigateType.OneToMany, nameof(OrderFlightEntity.OrderId))]
+ [SugarColumn(IsIgnore = true)]
public List OrderFlights { get; set; }
-
- [Navigate(NavigateType.OneToMany, nameof(OrderFlightEntity.OrderId))]
+ [SugarColumn(IsIgnore = true)]
public List OrderTemplates { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
index 185f0874..d79c78df 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
@@ -11,7 +11,7 @@ public interface ITrackDetailsRepository
Task> GetListAsync(int orderType, List orderNos);
Task<(List list, long total)> GetListAsync(TrackDetailsQueryInput input);
- Task> GetListAsync(int orderId);
+ Task?> GetListAsync(int orderId);
///
/// 删除轨迹
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs
index 6a330083..0004343c 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs
@@ -59,7 +59,7 @@ public class TrackDetailsIndex : IdBaseIndex
///
/// 轨迹发生地
///
- public string? TrackPlace { get; set; }
+ public string TrackPlace { get; set; } = null!;
///
/// 轨迹发生时间
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index f8cd7136..728a0606 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -9,12 +9,17 @@ namespace SJZY.Track.Repository.Repositories;
public class OrderRepository : BasicRepository, IOrderRepository, ITransientDependency
{
- public async Task CreateOrderAsync(OrderEntity order)
+ public async Task CreateOrderAsync(OrderEntity order)
{
- return await Context.InsertNav(order)
- .Include(x => x.OrderFlights)
- .Include(x => x.OrderTemplates)
- .ExecuteCommandAsync();
+ using var tran = TransactionHelper.GetReadCommitted();
+
+ var orderId = await InsertReturnIdentityAsync(order);
+ order.OrderTemplates.ForEach(x => x.OrderId = orderId);
+ await Context.Insertable(order.OrderTemplates).ExecuteCommandAsync();
+ order.OrderFlights.ForEach(x => x.OrderId = orderId);
+ await Context.Insertable(order.OrderFlights).ExecuteCommandAsync();
+
+ tran.Complete();
}
public async Task UpdateOrderAsync(OrderEntity order)
diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
index 590cb749..71779e5d 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
@@ -1,4 +1,6 @@
using Nest;
+using SJZY.Expand.ABP.Core.Logger;
+using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Expand.ElasticSearch.Services;
using SJZY.Track.Domain;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
@@ -9,8 +11,6 @@ namespace SJZY.Track.Repository.Repositories;
internal class TrackDetailsRepository : ElasticSearchContextAbstract, ITrackDetailsRepository,
ITransientDependency
{
- public string IndexName => $"{GlobalConst.TrackIndex}-{DateTime.Now:yyyy.MM.dd}";
-
public TrackDetailsRepository(ConnectionFactory connectionFactory) : base(connectionFactory)
{
}
@@ -18,32 +18,46 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract GetFirstOrDefaultAsync(int orderId, string trackCode)
{
var r = await Context.SearchAsync(s => s
- .Index(IndexName)
+ .Source()
.Query(q =>
- q.Term(t => t.Field(f => f.OrderId).Value(orderId))
- && q.Term(t => t.Field(f => f.TrackCode).Value(trackCode))
- && q.Term(t => t.Field(f => f.IsDeleted).Value(true))
+ q.Term(f => f.OrderId, orderId)
+ && q.Term(f => f.TrackCode.Suffix("keyword"), trackCode)
+ && q.Term(f => f.IsDeleted, false)
)
);
-
- if (r.IsValid)
+
+ var res= r.Documents.FirstOrDefault();
+ if (r.Hits.FirstOrDefault() != default && res != default)
{
- return r.Documents.FirstOrDefault();
+ res.Id = r.Hits.FirstOrDefault()!.Id;
}
- return default;
+ return res;
}
public async Task UpsertAsync(TrackDetailsIndex index)
{
- var response = await Context.UpdateAsync(index.Id, u => u
- .Index(IndexName)
- .Doc(index)
- .DocAsUpsert()
- //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
- );
- if (!response.IsValid)
- throw new Exception($"数据修改失败,原因:{response.DebugInformation}");
+ try
+ {
+ if (index.Id.IsNullOrWhiteSpace())
+ {
+ // 按天写入es
+ await Context.IndexAsync(index, request => request
+ .Index($"{GlobalConst.TrackIndex}-{DateTime.Now:yyyy.MM.dd}")
+ );
+ }
+ else
+ {
+ await Context.UpdateAsync(index.Id, u => u
+ .Doc(index)
+ //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
+ );
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error($"轨迹数据新增/修改失败,原因:{ex.Message}。\n{index.ToJson()}");
+ }
}
public async Task> GetListAsync(int orderType, List orderNos)
@@ -61,17 +75,17 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract
q.Terms(t => t
- .Field(f => f.OrderNo)
+ .Field(f => f.OrderNo.Suffix("keyword"))
.Terms(orderNos))
&& q.Term(f => f.OrderType, orderType)
- && q.Term(t => t.Field(f => f.IsDeleted).Value(true))
+ && q.Term(t => t.Field(f => f.IsDeleted).Value(false))
)
);
return data.Documents.ToList();
}
- public async Task> GetListAsync(int orderId)
+ public async Task?> GetListAsync(int orderId)
{
var data = await Context.SearchAsync(x => x
.Source(s => s.Includes(fd => fd
@@ -83,7 +97,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract f.TraceTimeZone)
)).Query(q =>
q.Terms(t => t.Field(f => f.OrderId).Terms(orderId))
- && q.Term(t => t.Field(f => f.IsDeleted).Value(true))
+ && q.Term(t => t.Field(f => f.IsDeleted).Value(false))
)
);
@@ -98,7 +112,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract t.OrderId, orderId)
&& q.Terms(t => t.Field(f => f.TrackCode).Terms(trackCodes)))
.Script(s => s
- .Source("ctx._source.IsDeleted = true"))
+ .Source("ctx._source.isDeleted = true"))
);
}
@@ -114,7 +128,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract t
.Field(f => f.OrderNo)
.Terms(distinctOrderNumbers))
- && q.Term(t => t.Field(f => f.IsDeleted).Value(true))
+ && q.Term(t => t.Field(f => f.IsDeleted).Value(false))
)
.Sort(s => s.Field(f => f.CreateTime, SortOrder.Descending))
.From((input.PageIndex - 1) * input.PageSize)
diff --git a/src/SJZY.Track.Repository/SjzyTrackRepositoryModule.cs b/src/SJZY.Track.Repository/SjzyTrackRepositoryModule.cs
index 546d80d9..e7ca3b6b 100644
--- a/src/SJZY.Track.Repository/SjzyTrackRepositoryModule.cs
+++ b/src/SJZY.Track.Repository/SjzyTrackRepositoryModule.cs
@@ -39,6 +39,10 @@ public class SjzyTrackRepositoryModule : AbpModule
context.Services.AddElasticSearch(options =>
{
+ if (System.Diagnostics.Debugger.IsAttached)
+ {
+ options.ShowLogInfo = true;
+ }
options.NodeUrls = configuration.GetSection("ElasticSearch:NodeUrls").Get>()!;
options.LoginName = configuration["ElasticSearch:LoginName"]!;
options.Password = configuration["ElasticSearch:Password"]!;