【 5. 轨迹订单拉取配置】

https://www.tapd.cn/60863849/prong/tasks/view/1160863849001027889
This commit is contained in:
xiaolipro 2024-09-06 14:39:12 +08:00
parent f2a873a387
commit bbc9b3c754
19 changed files with 198 additions and 297 deletions

View File

@ -70,7 +70,7 @@ public class UpdateOrderInput : OrderNoInfo
/// <summary>
/// 拉取配置信息
/// </summary>
public List<PullConfigInfo> PullConfigInfos { get; set; }
public List<PullConfigInfo>? PullConfigInfos { get; set; }
}
public class PullConfigInfo

View File

@ -11,21 +11,6 @@ public class UpsertOrderInput : UpdateOrderInput
public int CustomId { get; set; }
}
public class OrderTemplateInfo
{
/// <summary>
/// 模板id
/// </summary>
[Required]
[Range(1, Int32.MaxValue)]
public int TemplateId { get; set; }
/// <summary>
/// 服务商id
/// </summary>
public int? ServiceProviderId { get; set; }
}
public class OrderFlightInfo
{
/// <summary>

View File

@ -18,9 +18,6 @@ public class OrderAutoMapperProfile : Profile
CreateMap<UpsertOrderInput, OrderEntity>(MemberList.None);
CreateMap<UpdateOrderInput, OrderEntity>(MemberList.None);
CreateMap<OrderTemplateInfo, OrderTemplateEntity>(MemberList.None)
.ForMember(dest => dest.ServiceProviderId, opt => opt.MapFrom(m => m.ServiceProviderId ?? 0))
.ForMember(dest => dest.TrackTemplateId, opt => opt.MapFrom(m => m.TemplateId));
CreateMap<OrderFlightInfo, OrderFlightEntity>(MemberList.None);
CreateMap<GetPageTrackOrderInput, GetPageTrackOrderInputVO>(MemberList.None);

View File

@ -4,7 +4,6 @@ using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Queries;
using Volo.Abp.DependencyInjection;
@ -35,7 +34,6 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
if (orders.Count == 0) return;
var updateOrders = new List<OrderEntity>();
var providerDic = await GetProviderDic(@event.OrderIds);
foreach (var order in orders)
{
if (order.LatestTrackContent != @event.TrackContent)
@ -59,20 +57,6 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
order.IsCompleted = @event.IsCompleted;
}
if (!string.IsNullOrEmpty(@event.TrackCode) && providerDic.TryGetValue(order.Id, out var provider))
{
var config =
await _trackPullCacheService.GetPullParamsWithContentAsync(provider.SubSystemId,
provider.ServiceProviderId);
if (!string.IsNullOrEmpty(config?.ParamConfig.TrackContentCode) &&
config.ParamConfig.TrackContentCode!.ToLower() == @event.TrackCode.ToLower())
{
// 触发拉取节点
order.IsTriggerPull = 1;
}
}
order.LatestTrackContent = @event.TrackContent;
order.LatestTrackEnContent = @event.TrackEnContent;
order.LatestTrackPlace = @event.TrackPlace;
@ -90,7 +74,6 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
x.LatestTrackPlace,
x.LatestTrackTime,
x.LatestTrackTimeZone,
x.IsTriggerPull,
x.DeficiencyTag
});
@ -122,7 +105,6 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
IsTransit = order.IsTransit,
LeavePort = order.LeavePort,
ProductCode = order.ProductCode,
IsTriggerPull = order.IsTriggerPull
});
}
@ -149,16 +131,4 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
}).ToList()
};
}
/// <summary>
/// 获取服务商字典
/// </summary>
/// <param name="orderIds"></param>
/// <returns></returns>
private async Task<Dictionary<int, OrderTransportDto>> GetProviderDic(int[] orderIds)
{
var providerList = await _provideQueries.FindOrderWithServiceProviderAsync(orderIds);
return providerList.GroupBy(val => val.OrderId)
.ToDictionary(val => val.Key, val => val.First());
}
}

View File

@ -4,6 +4,7 @@ using SJZY.Track.Application.Contract.Dtos.ProvideServices;
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.Queries;
using SJZY.UserCenter.HttpApi.Services;
@ -67,8 +68,11 @@ public partial class OrderService : ApplicationService, IOrderService
order = ObjectMapper.Map<UpsertOrderInput, OrderEntity>(input);
order.SubSystemId = subSystemId;
order.OrderFlights = ObjectMapper.Map<List<OrderFlightInfo>, List<OrderFlightEntity>>(input.FlightInfos);
order.OrderPullStatus = BuiltOrderPullStatus(input.PullConfigInfos);
var orderId = await _orderRepository.CreateOrderAsync(order);
// 写入操作日志
var indexForAdd = new OrderOperationRecordIndex
{
OrderId = orderId,
@ -78,9 +82,9 @@ public partial class OrderService : ApplicationService, IOrderService
CreateUserId = CurrentUserRequest.CurrentUser.UserId,
CreateTime = DateTime.Now
};
_ = _orderOperationRecordRepository.AddAsync(indexForAdd);
return new UnifyResultDto<IdBaseDto>(true, new IdBaseDto
{
Id = orderId
@ -118,4 +122,22 @@ public partial class OrderService : ApplicationService, IOrderService
order.OrderFlights = ObjectMapper.Map<List<OrderFlightInfo>, List<OrderFlightEntity>>(input.FlightInfos);
await _orderRepository.UpdateOrderAsync(order);
}
private List<OrderPullStatusEntity> BuiltOrderPullStatus(List<PullConfigInfo>? pullConfigInfos)
{
if (pullConfigInfos == null) return new List<OrderPullStatusEntity>();
return pullConfigInfos.Select(x => new OrderPullStatusEntity
{
ServiceProviderCode = x.ServiceCode,
PullStatus = TrackPullStatus.Init,
StartTrackCode = x.StartCode ?? GlobalConst.EmptyString,
EndTrackCode = x.EndCode ?? GlobalConst.EmptyString,
SilenceBeforeStart = x.SilenceTime,
SilenceAfterEnd = x.StopTime,
StartTime = DateTime.MaxValue,
EndTime = DateTime.MaxValue,
}).ToList();
}
}

View File

@ -54,11 +54,9 @@ public class TrackPullService : ApplicationService
throw new BusinessException(message: "一个能更新的都没有");
}
foreach (var group in orders.GroupBy(x =>
new
{
x.ServiceProviderId,
x.ServiceProviderName,
x.SubSystemId,
x.OrderType

View File

@ -6,8 +6,6 @@ using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Enums;
using SJZY.Track.Domain.Queries;
namespace SJZY.Track.Application.Services.TrackOrders;
@ -19,19 +17,16 @@ public class TrackOrderService : ApplicationService
private readonly IOrderRepository _orderRepository;
private readonly ITrackContentRepository _trackContentRepository;
private readonly ITrackDetailsRepository _trackDetailsRepository;
private readonly ITrackOrderQueries _trackOrderQueries;
private readonly ITrackPushRecordsRepository _trackPushRecordsRepository;
public TrackOrderService(
IOrderRepository orderRepository,
ITrackOrderQueries trackOrderQueries,
ITrackDetailsRepository trackDetailsRepository,
ITrackContentRepository trackContentRepository,
ITrackPushRecordsRepository trackPushRecordsRepository,
IOrderOperationRecordRepository orderOperationRecordRepository)
{
_orderRepository = orderRepository;
_trackOrderQueries = trackOrderQueries;
_trackDetailsRepository = trackDetailsRepository;
_trackContentRepository = trackContentRepository;
_trackPushRecordsRepository = trackPushRecordsRepository;
@ -46,10 +41,10 @@ public class TrackOrderService : ApplicationService
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("GetTrackOrderList")]
public async Task<UnifyPageResultDto<TrackOrderDto>> GetPageTrackOrder(GetPageTrackOrderInput input)
public async Task<UnifyPageResultDto<TrackOrderDto>> GetTrackOrderPagedList(GetPageTrackOrderInput input)
{
var vo = ObjectMapper.Map<GetPageTrackOrderInput, GetPageTrackOrderInputVO>(input);
var pageList = await _trackOrderQueries.GetPageTrackOrder(vo);
var pageList = await _orderRepository.GetTrackOrderPagedList(vo);
var pageResultDto =
ObjectMapper.Map<UnifyPageResultDto<TrackOrderVO>, UnifyPageResultDto<TrackOrderDto>>(pageList);
return pageResultDto;
@ -72,23 +67,6 @@ public class TrackOrderService : ApplicationService
});
}
/// <summary>
/// 获取轨迹计数器
/// </summary>
/// <returns></returns>
[HttpGet("GetTrackCounter")]
public async Task<GetTrackCounterOutput> GetTrackCounterAsync()
{
var counts = await _trackOrderQueries.GetTrackProblemCountsAsync();
return new GetTrackCounterOutput
{
TotalCount = counts.Sum(x => x.Count),
ErrorCount = counts.FirstOrDefault(x => x.ProblemType == (int) TrackProblemType.Error)?.Count ?? 0,
WarnCount = counts.FirstOrDefault(x => x.ProblemType == (int) TrackProblemType.Warn)?.Count ?? 0,
};
}
/// <summary>
/// 获取轨迹推送记录
/// </summary>

View File

@ -4,6 +4,13 @@ namespace SJZY.Track.Domain.Aggregates.OrderAggregate;
public interface IOrderRepository : IBasicRepository<OrderEntity>
{
/// <summary>
/// 获取分页的轨迹订单
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<UnifyPageResultDto<TrackOrderVO>> GetTrackOrderPagedList(GetPageTrackOrderInputVO input);
/// <summary>
/// 创建订单
/// </summary>

View File

@ -168,14 +168,10 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
[SugarColumn(ColumnName = "ArrivalProvince")]
public string? ArrivalProvince { get; set; }
/// <summary>
/// 是否触发拉取,1表示触发
/// </summary>
[SugarColumn(ColumnName = "IsTriggerPull")]
public short? IsTriggerPull { get; set; }
[SugarColumn(IsIgnore = true)] public List<OrderFlightEntity> OrderFlights { get; set; }
[SugarColumn(IsIgnore = true)] public List<OrderPullStatusEntity> OrderPullStatus { get; set; }
public void ResetTrackInfo()
{
IsCompleted = false;

View File

@ -1,50 +0,0 @@
namespace SJZY.Track.Domain.Aggregates.OrderAggregate;
/// <summary>
/// 轨迹订单模板表(1:N)
/// </summary>
[SugarTable("t_order_template")]
public class OrderTemplateEntity : ICreateBaicEntity, ISoftDeleteBasicEntity, IEntity
{
/// <summary>
/// 自增主键
/// </summary>
[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 = "ServiceProviderId")]
public int ServiceProviderId { get; set; }
/// <summary>
/// 模板id
/// </summary>
[SugarColumn(ColumnName = "TrackTemplateId")]
public int TrackTemplateId { get; set; }
/// <summary>
/// 创建人
/// </summary>
[SugarColumn(ColumnName = "CreateUserId")]
public int CreateUserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnName = "CreateTime")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 是否删除
/// </summary>
[SugarColumn(ColumnName = "IsDeleted")]
public bool IsDeleted { get; set; }
}

View File

@ -0,0 +1,80 @@
namespace SJZY.Track.Domain.Aggregates.OrderAggregate;
/// <summary>
/// 订单轨迹拉取状态表(1:N)
/// </summary>
[SugarTable("t_order_pull_status")]
public class OrderPullStatusEntity : ICreateBaicEntity, IEntity
{
/// <summary>
/// 自增主键
/// </summary>
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 订单id
/// </summary>
[SugarColumn(ColumnName = "OrderId")]
public int OrderId { get; set; }
/// <summary>
/// 服务商code
/// </summary>
[SugarColumn(ColumnName = "ServiceProviderCode")]
public string ServiceProviderCode { get; set; }
/// <summary>
/// 拉取状态
/// </summary>
[SugarColumn(ColumnName = "PullStatus")]
public TrackPullStatus PullStatus { get; set; }
/// <summary>
/// 开始轨迹code
/// </summary>
[SugarColumn(ColumnName = "StartTrackCode")]
public string StartTrackCode { get; set; }
/// <summary>
/// 结束轨迹code
/// </summary>
[SugarColumn(ColumnName = "EndTrackCode")]
public string EndTrackCode { get; set; }
/// <summary>
/// 开始前的静默(小时)
/// </summary>
[SugarColumn(ColumnName = "SilenceBeforeStart")]
public int SilenceBeforeStart { get; set; }
/// <summary>
/// 结束后的静默(小时)
/// </summary>
[SugarColumn(ColumnName = "SilenceAfterEnd")]
public int SilenceAfterEnd { get; set; }
/// <summary>
/// 定时任务开始时间(计算量)
/// </summary>
[SugarColumn(ColumnName = "StartTime")]
public DateTime StartTime { get; set; }
/// <summary>
/// 定时任务结束时间(计算量)
/// </summary>
[SugarColumn(ColumnName = "EndTime")]
public DateTime EndTime { get; set; }
/// <summary>
/// 创建人
/// </summary>
[SugarColumn(ColumnName = "CreateUserId")]
public int CreateUserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnName = "CreateTime")]
public DateTime CreateTime { get; set; }
}

View File

@ -0,0 +1,29 @@
namespace SJZY.Track.Domain.Aggregates.OrderAggregate;
public enum TrackPullStatus
{
/// <summary>
/// 初始态
/// </summary>
Init = 0,
/// <summary>
/// 开始前的静默
/// </summary>
SilenceBeforeStart,
/// <summary>
/// 拉取中
/// </summary>
Pulling,
/// <summary>
/// 结束后的静默
/// </summary>
SilenceAfterEnd,
/// <summary>
/// 拉取完成
/// </summary>
Completed
}

View File

@ -68,11 +68,6 @@ public class TrackOrderVO
/// </summary>
public string? OrderNumber { get; set; }
/// <summary>
/// 轨迹模版
/// </summary>
public string? TrackTemplateNames { get; set; }
/// <summary>
/// 客户简称
/// </summary>
@ -133,11 +128,6 @@ public class TrackOrderVO
/// </summary>
public int SubSystemId { get; set; }
/// <summary>
/// 轨迹模板Id数组
/// </summary>
public List<int>? TrackTemplateIds { get; set; }
/// <summary>
/// 问题类型(主数据枚举TrackQuestionType)
/// </summary>

View File

@ -9,8 +9,6 @@ public class OrderWithServiceProviderVO
/// </summary>
public int OrderType { get; set; }
public int ServiceProviderId { get; set; }
/// <summary>
/// 服务商code
/// </summary>

View File

@ -27,19 +27,12 @@ public interface IProvideQueries
/// <summary>
/// 获取服务商下所有单(未完成的)
/// </summary>
/// <param name="serviceProvider"></param>
/// <param name="serviceProviderId"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
Task<List<OrderWithServiceProviderVO>> FindOrderWithServiceProviderAsync(int serviceProvider, int pageIndex,
Task<List<OrderWithServiceProviderVO>> FindOrderWithServiceProviderAsync(int serviceProviderId, int pageIndex,
int pageSize = 1000);
Task<TrackContentVO?> GetTrackContentAsync(int subSystemId, string trackCode);
/// <summary>
/// 查找订单和服务商信息
/// </summary>
/// <param name="orderIds">订单id</param>
/// <returns>订单和服务商信息</returns>
Task<List<OrderTransportDto>> FindOrderWithServiceProviderAsync(int[] orderIds);
}

View File

@ -1,19 +0,0 @@
using SJZY.Track.Domain.Dtos.Order;
namespace SJZY.Track.Domain.Queries;
public interface ITrackOrderQueries
{
/// <summary>
/// 获取分页的轨迹订单
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<UnifyPageResultDto<TrackOrderVO>> GetPageTrackOrder(GetPageTrackOrderInputVO input);
/// <summary>
/// 获取轨迹各个问题数
/// </summary>
/// <returns></returns>
Task<List<GetTrackCounterVO>> GetTrackProblemCountsAsync();
}

View File

@ -37,14 +37,13 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
public async Task<List<OrderWithServiceProviderVO>> FindOrderWithServiceProviderAsync(List<string> orderNos)
{
return await Context.Queryable<OrderEntity>()
.LeftJoin<OrderTemplateEntity>((a, b) => a.Id == b.OrderId)
.LeftJoin<VServiceProviderEntity>((a, b, c) => b.ServiceProviderId == c.Id)
.LeftJoin<OrderPullStatusEntity>((a, b) => a.Id == b.OrderId)
.LeftJoin<VServiceProviderEntity>((a, b, c) => b.ServiceProviderCode == c.Code)
.Where(a => !a.IsCompleted && orderNos.Contains(a.OrderNo))
.Select((a, b, c) => new OrderWithServiceProviderVO
{
OrderNo = a.OrderNo,
OrderType = a.OrderType,
ServiceProviderId = b.ServiceProviderId,
ServiceProviderCode = c.Code,
ServiceProviderName = c.Name,
SubSystemId = a.SubSystemId
@ -53,18 +52,17 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
}
/// <inheritdoc />
public async Task<List<OrderWithServiceProviderVO>> FindOrderWithServiceProviderAsync(int serviceProvider,
public async Task<List<OrderWithServiceProviderVO>> FindOrderWithServiceProviderAsync(int serviceProviderId,
int pageIndex, int pageSize = 1000)
{
return await Context.Queryable<OrderEntity>()
.RightJoin<OrderTemplateEntity>((a, b) => a.Id == b.OrderId)
.LeftJoin<VServiceProviderEntity>((a, b, c) => b.ServiceProviderId == c.Id)
.Where((a, b) => b.ServiceProviderId == serviceProvider && !a.IsCompleted && a.IsTriggerPull == 1)
.RightJoin<OrderPullStatusEntity>((a, b) => a.Id == b.OrderId)
.LeftJoin<VServiceProviderEntity>((a, b, c) => b.ServiceProviderCode == c.Code)
.Where((a, b, c) => c.Id == serviceProviderId && !a.IsCompleted)
.Select((a, b, c) => new OrderWithServiceProviderVO
{
OrderNo = a.OrderNo,
OrderType = a.OrderType,
ServiceProviderId = b.ServiceProviderId,
ServiceProviderCode = c.Code,
ServiceProviderName = c.Name,
SubSystemId = a.SubSystemId
@ -74,21 +72,6 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
.ToListAsync();
}
/// <inheritdoc />
public async Task<List<OrderTransportDto>> FindOrderWithServiceProviderAsync(int[] orderIds)
{
return await Context.Queryable<OrderEntity>()
.InnerJoin<OrderTemplateEntity>((a, b) => a.Id == b.OrderId)
.Where((a, b) => orderIds.Contains(a.Id) && !a.IsCompleted)
.Select((a, b) => new OrderTransportDto
{
OrderId = a.Id,
ServiceProviderId = b.ServiceProviderId,
SubSystemId = a.SubSystemId
})
.ToListAsync();
}
/// <inheritdoc />
public async Task<TrackContentVO?> GetTrackContentAsync(int subSystemId, string trackCode)
{

View File

@ -1,101 +0,0 @@
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Enums;
using SJZY.Track.Domain.Queries;
using SJZY.Track.Domain.VEntities;
namespace SJZY.Track.Repository.Queries;
public class TrackOrderQueries : ISugarRepository, ITrackOrderQueries,
ITransientDependency
{
public TrackOrderQueries()
{
Context = SqlsugarScopeBasic.GetContextSafely("default");
}
public ISqlSugarClient Context { get; set; }
/// <summary>
/// 获取分页的轨迹订单
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<UnifyPageResultDto<TrackOrderVO>> GetPageTrackOrder(GetPageTrackOrderInputVO input)
{
var pageList = await Context.Queryable<OrderEntity>()
.LeftJoin<VExternalSubjectEntity>((a, b) => a.CustomId == b.Id && b.IsDeleted == false)
.LeftJoin<VSystemEntity>((a, b, c) => a.SubSystemId == c.Id && c.IsDeleted == false)
.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.CustomerId > 0, (a, b, c) => a.CustomId == input.CustomerId)
.WhereIF(input.TrackOrderType > 0, (a, b, c) => a.OrderType == input.TrackOrderType)
.WhereIF(input.TabType > 0, (a, b, c) => a.QuestionType == input.TabType)
.WhereIF(input.TabType == (int) TrackProblemType.Warn, (a, b, c) => !a.IsCompleted)
.OrderByDescending((a, b, c) => a.CreateTime)
.Select((a, b, c) => new TrackOrderVO
{
Id = a.Id,
OrderNumber = a.OrderNo,
OrderType = a.OrderType,
QuestionType = a.QuestionType,
CustomerShortName = b.Abbreviation,
CustomerCode = b.Code,
CustomerId = a.CustomId,
NewestTrackContent = a.LatestTrackContent,
NewestTrackEnContent = a.LatestTrackEnContent,
NewestTrackPlace = a.LatestTrackPlace,
NewestTrackTime = a.LatestTrackTime,
IsFinish = a.IsCompleted,
CreateTime = a.CreateTime,
SubSystem = c.CnName,
SubSystemId = c.Id
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
if (pageList.List.Any())
{
//查询也需要最新的轨迹
var orderIds = pageList.List.Select(a => a.Id).ToList();
//查询轨迹模版
var trackTemplateList = await Context.Queryable<OrderTemplateEntity>()
.LeftJoin<TrackTemplateEntity>((a, b) => a.TrackTemplateId == b.Id)
.Where((a, b) => orderIds.Contains(a.OrderId))
.Select((a, b) => new
{
a.OrderId,
b.Name,
TemplateId = b.Id
})
.ToListAsync();
pageList.List.ForEach(a =>
{
a.TrackTemplateNames = trackTemplateList.Where(b => b.OrderId == a.Id).Select(x => x.Name)
.JoinAsString(",");
a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId == a.Id).Where(b => b.TemplateId > 0)
.Select(x => x.TemplateId).ToList();
});
}
return pageList;
}
public async Task<List<GetTrackCounterVO>> GetTrackProblemCountsAsync()
{
return await Context.Queryable<OrderEntity>()
.GroupBy(x => x.QuestionType)
.Select(x => new GetTrackCounterVO
{
ProblemType = x.QuestionType,
Count = SqlFunc.AggregateCount(1)
})
.ToListAsync();
}
}

View File

@ -1,11 +1,54 @@
using SJZY.Track.Domain;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Enums;
using SJZY.Track.Domain.VEntities;
namespace SJZY.Track.Repository.Repositories;
public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, ITransientDependency
{
public async Task<UnifyPageResultDto<TrackOrderVO>> GetTrackOrderPagedList(GetPageTrackOrderInputVO input)
{
var pageList = await Context.Queryable<OrderEntity>()
.LeftJoin<VExternalSubjectEntity>((a, b) => a.CustomId == b.Id && b.IsDeleted == false)
.LeftJoin<VSystemEntity>((a, b, c) => a.SubSystemId == c.Id && c.IsDeleted == false)
.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.CustomerId > 0, (a, b, c) => a.CustomId == input.CustomerId)
.WhereIF(input.TrackOrderType > 0, (a, b, c) => a.OrderType == input.TrackOrderType)
.WhereIF(input.TabType > 0, (a, b, c) => a.QuestionType == input.TabType)
.WhereIF(input.TabType == (int) TrackProblemType.Warn, (a, b, c) => !a.IsCompleted)
.OrderByDescending((a, b, c) => a.CreateTime)
.Select((a, b, c) => new TrackOrderVO
{
Id = a.Id,
OrderNumber = a.OrderNo,
OrderType = a.OrderType,
QuestionType = a.QuestionType,
CustomerShortName = b.Abbreviation,
CustomerCode = b.Code,
CustomerId = a.CustomId,
NewestTrackContent = a.LatestTrackContent,
NewestTrackEnContent = a.LatestTrackEnContent,
NewestTrackPlace = a.LatestTrackPlace,
NewestTrackTime = a.LatestTrackTime,
IsFinish = a.IsCompleted,
CreateTime = a.CreateTime,
SubSystem = c.CnName,
SubSystemId = c.Id
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
return pageList;
}
public async Task<int> CreateOrderAsync(OrderEntity order)
{
using var tran = TransactionHelper.GetReadCommitted();
@ -13,6 +56,8 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
var orderId = await InsertReturnIdentityAsync(order);
order.OrderFlights.ForEach(x => x.OrderId = orderId);
await Context.Insertable(order.OrderFlights).ExecuteCommandAsync();
order.OrderPullStatus.ForEach(x => x.OrderId = orderId);
await Context.Insertable(order.OrderPullStatus).ExecuteCommandAsync();
tran.Complete();
@ -42,7 +87,7 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
});
// 更新订单模板
await Context.Deleteable<OrderTemplateEntity>().Where(x => x.OrderId == order.Id).ExecuteCommandAsync();
await Context.Deleteable<OrderPullStatusEntity>().Where(x => x.OrderId == order.Id).ExecuteCommandAsync();
// 更新订单航班
await Context.Deleteable<OrderFlightEntity>().Where(x => x.OrderId == order.Id).ExecuteCommandAsync();