Merge pull request 'S01-轨迹中台' (#3) from S01-轨迹中台 into dev

Reviewed-on: http://192.168.80.50:3000/Dotnet/SJZY.Track.Api/pulls/3
This commit is contained in:
liuwenxiang 2024-03-01 14:11:23 +08:00
commit d29d468bc6
14 changed files with 208 additions and 52 deletions

View File

@ -37,6 +37,7 @@ namespace SJZY.Track.Api
var environment = context.Services.GetHostingEnvironment();
var configuration = context.Services.GetConfiguration();
context.Services.AddSwagger();
//过滤器相关配置
context.Services.AddMvc(options =>
{
@ -60,7 +61,6 @@ namespace SJZY.Track.Api
Configure<AbpJsonOptions>(options => options.OutputDateTimeFormat = "yyyy-MM-dd HH:mm:ss");
Configure<AbpAuditingOptions>(options => { options.IsEnabled = false; });
context.Services.AddRedis();
}

View File

@ -0,0 +1,6 @@
namespace SJZY.Track.Application.Contract.Dtos.ProvideServices;
public class TrackUpsertEvent
{
public int Order { get; set; }
}

View File

@ -5,5 +5,5 @@ namespace SJZY.Track.Application.Services.ProvideServices;
public class TrackCustomer : ITransientDependency, ICapSubscribe
{
public const string CapSubscribe = "SJZY.FMC.VoucherRedundantCalc";
public const string CapSubscribe = "SJZY.Track.Upsert";
}

View File

@ -81,6 +81,7 @@ public class TrackService : ApplicationService
}
// 根据订单关联关系向下刷,不同子系统还需要做内容映射
var links = await _orderRepository.GetLinkedOrderIdsAsync(orderId);
// 推送
return true;

View File

@ -57,4 +57,15 @@ public class TrackPushService : ApplicationService, ITransientDependency
{
return await _trackPushConfigRepository.GetDetailAsync(id);
}
/// <summary>
/// 轨迹推送配置内容详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("GetContentDetail")]
public async Task<GetTrackPushContentDetailOutputVO> GetContentDetailAsync(int id)
{
return await _trackPushConfigRepository.GetContentDetailAsync(id);
}
}

View File

@ -20,6 +20,30 @@ public interface IOrderRepository : IBasicRepository<OrderEntity>
/// <returns></returns>
Task<UnifyPageResultDto<TrackOrderVO>> GetPageTrackOrder(GetPageTrackOrderInputVO input);
/// <summary>
/// 更新订单
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
Task UpdateOrderAsync(OrderEntity order);
/// <summary>
/// 删除订单
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
Task DeleteOrderAsync(int orderId);
#region 订单关联
/// <summary>
/// 根据订单id,获取关联的订单id集合
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
Task<List<int>> GetLinkedOrderIdsAsync(int orderId);
/// <summary>
/// 关联订单
/// </summary>
@ -34,17 +58,5 @@ public interface IOrderRepository : IBasicRepository<OrderEntity>
/// <returns></returns>
Task UnLinkByIdsAsync(List<int> linkIds);
/// <summary>
/// 更新订单
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
Task UpdateOrderAsync(OrderEntity order);
/// <summary>
/// 删除订单
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
Task DeleteOrderAsync(int orderId);
#endregion
}

View File

@ -12,6 +12,18 @@ public class OrderLinkEntity : ICreateBaicEntity, ISoftDeleteBasicEntity, IEntit
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 订单id
/// </summary>
[SugarColumn(ColumnName = "OrderId")]
public int OrderId { get; set; }
/// <summary>
/// 关联的订单id
/// </summary>
[SugarColumn(ColumnName = "LinkOrderId")]
public int LinkOrderId { get; set; }
/// <summary>
/// 订单类型
/// </summary>
@ -24,6 +36,7 @@ public class OrderLinkEntity : ICreateBaicEntity, ISoftDeleteBasicEntity, IEntit
[SugarColumn(ColumnName = "OrderNo")]
public string OrderNo { get; set; } = null!;
/// <summary>
/// 关联的订单类型
/// </summary>

View File

@ -13,4 +13,5 @@ public interface ITrackDetailsRepository
Task<List<TrackDetailsIndex>> GetListAsync(int orderType, List<string> orderNos);
Task<(List<TrackDetailsIndex> list, long total)> GetListAsync(TrackDetailsQueryInput input);
Task<List<TrackDetailsIndex>> GetListAsync(int orderId);
}

View File

@ -10,4 +10,6 @@ public interface ITrackPushConfigRepository : IBasicRepository<TrackPushConfigEn
Task<UnifyPageResultDto<GetTrackPushContentPageOutputVO>> GetContentPageAsync(GetTrackPushContentPageInputVO input);
Task<GetTrackPushConfigDetailOutputVO> GetDetailAsync(int id);
Task<GetTrackPushContentDetailOutputVO> GetContentDetailAsync(int id);
}

View File

@ -0,0 +1,61 @@
namespace SJZY.Track.Domain.Dtos.TrackPush;
public class GetTrackPushContentDetailOutputVO
{
/// <summary>
/// 轨迹内容代码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 推送扩展字段
/// </summary>
public string ExpandFieldsValue { get; set; }
public int Id { get; set; }
/// <summary>
/// 推送单号类型
/// </summary>
public int OrderNoType { get; set; }
/// <summary>
/// 推送轨迹排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 推送轨迹内容代码
/// </summary>
public string TrackContentCodeValue { get; set; }
/// <summary>
/// 轨迹内容id
/// </summary>
public int TrackContentId { get; set; }
/// <summary>
/// 推送轨迹内容
/// </summary>
public string TrackContentValue { get; set; }
/// <summary>
/// 推送轨迹内容英文
/// </summary>
public string TrackEnContentValue { get; set; }
/// <summary>
/// 轨迹推送配置id
/// </summary>
public int TrackPullConfigId { get; set; }
/// <summary>
/// 推送轨迹状态
/// </summary>
public string TrackStatusValue { get; set; }
/// <summary>
/// 推送轨迹时区
/// </summary>
public string TrackTimeZone { get; set; }
}

View File

@ -1,5 +1,4 @@
using Nest;
using SJZY.Track.Domain;
using SJZY.Track.Domain;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.Dtos.Order;
@ -18,16 +17,6 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
.ExecuteCommandAsync();
}
public async Task LinkOrderAsync(List<OrderLinkEntity> orderLinkEntities)
{
await Context.Insertable(orderLinkEntities).ExecuteCommandAsync();
}
public async Task UnLinkByIdsAsync(List<int> linkIds)
{
await Context.Deleteable(linkIds).ExecuteCommandAsync();
}
public async Task UpdateOrderAsync(OrderEntity order)
{
using var tran = TransactionHelper.GetReadCommitted();
@ -62,6 +51,29 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
tran.Complete();
}
#region 订单关联
public async Task<List<int>> GetLinkedOrderIdsAsync(int orderId)
{
return await Context.Queryable<OrderEntity>()
.LeftJoin<OrderLinkEntity>((a, b) => a.Id == b.OrderId)
.Where(a => a.Id == orderId)
.Select((a, b) => b.LinkOrderId)
.ToListAsync();
}
public async Task LinkOrderAsync(List<OrderLinkEntity> orderLinkEntities)
{
await Context.Insertable(orderLinkEntities).ExecuteCommandAsync();
}
public async Task UnLinkByIdsAsync(List<int> linkIds)
{
await Context.Deleteable(linkIds).ExecuteCommandAsync();
}
#endregion
#region 轨迹订单明细
/// <summary>
@ -90,9 +102,12 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
.LeftJoin<VSystemEntity>((a, b, c) => a.SubSystemId == c.Id)
.WhereIF(input.SubSystemId > 0, (a, b, c) => a.SubSystemId == input.SubSystemId)
.WhereIF(!input.OrderNos.IsNullOrEmpty(), (a, b, c) => input.OrderNos.Contains(a.OrderNo))
.WhereIF(input.CreateTimeStart.HasValue&& input.CreateTimeEnd.HasValue, (a, b, c) => a.CreateTime>= input.CreateTimeStart && a.CreateTime<= input.CreateTimeEnd)
.WhereIF(input.CreateTimeStart.HasValue&& (!input.CreateTimeEnd.HasValue), (a, b, c) => a.CreateTime>= input.CreateTimeStart)
.WhereIF((!input.CreateTimeStart.HasValue)&& input.CreateTimeEnd.HasValue, (a, b, c) => a.CreateTime<= input.CreateTimeEnd)
.WhereIF(input.CreateTimeStart.HasValue && input.CreateTimeEnd.HasValue,
(a, b, c) => a.CreateTime >= input.CreateTimeStart && a.CreateTime <= input.CreateTimeEnd)
.WhereIF(input.CreateTimeStart.HasValue && (!input.CreateTimeEnd.HasValue),
(a, b, c) => a.CreateTime >= input.CreateTimeStart)
.WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue,
(a, b, c) => a.CreateTime <= input.CreateTimeEnd)
.Select((a, b, c) => new TrackOrderVO
{
Id = a.Id,
@ -100,7 +115,8 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
OrderType = a.OrderType,
CustomerShortName = b.Abbreviation,
CustomerCode = b.Code,
TrackTemplateNames = SqlFunc.Subqueryable<OrderTemplateEntity>().LeftJoin<TrackTemplateEntity>((aa, bb) => aa.TrackTemplateId==bb.Id)
TrackTemplateNames = SqlFunc.Subqueryable<OrderTemplateEntity>()
.LeftJoin<TrackTemplateEntity>((aa, bb) => aa.TrackTemplateId == bb.Id)
.Where((aa, bb) => a.Id == aa.OrderId).SelectStringJoin((aa, bb) => bb.Name, ","),
NewestTrackContent = a.LatestTrackContent,
NewestTrackEnContent = a.LatestTrackEnContent,
@ -110,7 +126,9 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
SubSystem = c.CnName
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
#region 暂时注释
//if (pageList.List.Any())
//{
// var orderIds = pageList.List.Select(a => a.Id);
@ -129,7 +147,9 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
// a.TrackTemplateNames = templateListOfOrderId.Select(c => c.Name).JoinAsString(",");
// });
//}
#endregion
return pageList;
}

View File

@ -73,6 +73,21 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
return data.Documents.ToList();
}
public async Task<List<TrackDetailsIndex>> GetListAsync(int orderId)
{
var data = await Context.SearchAsync<TrackDetailsIndex>(x => x
.Source(s => s.Includes(fd => fd
.Field(f => f.TrackStatus)
.Field(f => f.TrackCode)
.Field(f => f.TrackContent)
.Field(f => f.TrackPlace)
.Field(f => f.TrackTime)
.Field(f => f.TraceTimeZone)
)).Query(q => q.Terms(t => t.Field(f => f.OrderId).Terms(orderId))));
return data?.Documents?.ToList();
}
public async Task<(List<TrackDetailsIndex> list, long total)> GetListAsync(TrackDetailsQueryInput input)
{
if (input.OrderNos.Count < 1) return default;

View File

@ -69,4 +69,17 @@ public class TrackPushConfigRepository : BasicRepository<TrackPushConfigEntity>,
}, true)
.SingleAsync();
}
public async Task<GetTrackPushContentDetailOutputVO> GetContentDetailAsync(int id)
{
return await Context.Queryable<TrackPushContentConfigEntity>()
.InnerJoin<TrackContentEntity>((pushContent, trackContent) => pushContent.TrackContentId == trackContent.Id)
.Where(pushContent => pushContent.Id == id)
.Select((pushContent, trackContent) => new GetTrackPushContentDetailOutputVO
{
Id = pushContent.Id,
Code = trackContent.Code + "-" + trackContent.Content,
}, true)
.SingleAsync();
}
}

View File

@ -4,6 +4,7 @@
<TargetFramework>net7.0</TargetFramework>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<LangVersion>preview</LangVersion>
<AssemblyName>SJZY.Track.Repository</AssemblyName>
</PropertyGroup>
<ItemGroup>