track/src/SJZY.Track.Repository/Queries/TrackQueries.cs
2024-03-01 15:07:40 +08:00

78 lines
3.0 KiB
C#

using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Dtos.TrackDetails;
using SJZY.Track.Domain.Dtos.TrackTemplate;
using SJZY.Track.Domain.Queries;
namespace SJZY.Track.Repository.Queries;
public class TrackQueries : ISugarRepository, ITrackQueries,
ITransientDependency
{
public ISqlSugarClient Context { get; set; }
public TrackQueries()
{
Context = SqlsugarScopeBasic.GetContextSafely("default");
}
public async Task<List<OrderTemplateLinkDto>> GetOrderTemplateLinksAsync(int orderType,
params string[] orderNumbers)
{
return await Context.Queryable<OrderEntity>()
.LeftJoin<OrderTemplateEntity>((a, b) => a.Id == b.OrderId)
.Where(a => a.OrderType == orderType && orderNumbers.Contains(a.OrderNo))
.Select((a, b) => new OrderTemplateLinkDto
{
OrderNo = a.OrderNo,
TemplateId = b.TrackTemplateId
})
.ToListAsync();
}
public async Task<List<OrderTemplateLinkDto>> GetOrderTemplateLinksAsync(int orderType, List<string> orderNumbers)
{
return await Context.Queryable<OrderEntity>()
.LeftJoin<OrderTemplateEntity>((a, b) => a.Id == b.OrderId)
.Where(a => a.OrderType == orderType && orderNumbers.Contains(a.OrderNo))
.Select((a, b) => new OrderTemplateLinkDto
{
OrderNo = a.OrderNo,
TemplateId = b.TrackTemplateId
})
.ToListAsync();
}
public async Task<List<OrderedTrackCodeDto>> GetOrderedTrackCodesAsync(List<int> templateIds)
{
return await Context.Queryable<TrackTemplateContentEntity>()
.LeftJoin<TrackContentEntity>((a, b) => a.TrackContentId == b.Id)
.Where(a => templateIds.Contains(a.TrackTemplateId))
.OrderBy(a => a.Sort)
.Select((a, b) => new OrderedTrackCodeDto
{
TemplateId = a.Id,
Code = b.Code
})
.ToListAsync();
}
public async Task<MatchTrackContentDto?> MatchTrackContentAsync(int orderId, string code)
{
return await Context.Queryable<OrderTemplateEntity>()
.LeftJoin<TrackTemplateContentEntity>((x, a) => x.TrackTemplateId == a.TrackTemplateId)
.LeftJoin<TrackContentEntity>((x, a, b) => a.TrackContentId == b.Id)
.LeftJoin<TrackStatusEntity>((x, a, b, c) => b.TrackStatusId == c.Id)
.Where((x, a, b) => x.OrderId == orderId && b.Code == code)
.Select((x, a, b, c) => new MatchTrackContentDto
{
Content = b.Content,
EnContent = b.EnContent,
Status = c.Status
})
.FirstAsync();
}
}