track/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
2024-09-14 16:00:06 +08:00

118 lines
4.6 KiB
C#

using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Dtos.TrackContents;
using SJZY.Track.Domain.Dtos.TrackPull;
using SJZY.Track.Domain.Queries;
using SJZY.Track.Domain.VEntities;
namespace SJZY.Track.Repository.Queries;
/// <summary>
/// 提供服务相关查询
/// </summary>
public class ProvideQueries : ISugarRepository, IProvideQueries, ITransientDependency
{
/// <summary>
/// ctor
/// </summary>
public ProvideQueries()
{
Context = SqlsugarScopeBasic.GetContextSafely("default");
}
public async Task<List<string>> MapTrackCodesAsync(int upSubSystemId, int subSystemId, params string[] trackCodes)
{
// 根据上游code得到下游code
return await Context.Queryable<TrackContentMapEntity>()
.Where(x => x.SubSystemId == subSystemId && x.MapSubSystemId == upSubSystemId &&
trackCodes.Contains(x.MapTrackContentCode))
.Select(x => x.TrackContentCode)
.ToListAsync();
}
/// <inheritdoc />
public async Task<List<OrderWithServiceProviderVO>> FindOrderWithServiceProviderAsync(List<string> orderNos)
{
return await Context.Queryable<OrderEntity>()
.InnerJoin<OrderPullStatusEntity>((a, b) => a.Id == b.OrderId)
.LeftJoin<VServiceProviderEntity>((a, b, c) => b.ServiceProviderCode == c.Code)
.LeftJoin<VSystemEntity>((a, b, c, d) => a.SubSystemId == d.Id)
.Where(a => !a.IsCompleted && orderNos.Contains(a.OrderNo))
.Select((a, b, c, d) => new OrderWithServiceProviderVO
{
OrderNo = a.OrderNo,
OrderType = a.OrderType,
ServiceProviderCode = c.Code,
ServiceProviderName = c.Name,
SubSystemId = a.SubSystemId,
SubSystemCode = d.Key
})
.ToListAsync();
}
/// <inheritdoc />
public async Task<List<OrderWithServiceProviderVO>> FindOrderWithServiceProviderAsync(int serviceProviderId,
int pageIndex, int pageSize = 1000)
{
return await Context.Queryable<OrderEntity>()
.RightJoin<OrderPullStatusEntity>((a, b) => a.Id == b.OrderId)
.LeftJoin<VServiceProviderEntity>((a, b, c) => b.ServiceProviderCode == c.Code)
.LeftJoin<VSystemEntity>((a, b, c, d) => a.SubSystemId == d.Id)
.Where((a, b, c) => c.Id == serviceProviderId && !a.IsCompleted
&& b.StartTime <= DateTime.Now && b.EndTime >= DateTime.Now)
.Select((a, b, c, d) => new OrderWithServiceProviderVO
{
OrderNo = a.OrderNo,
OrderType = a.OrderType,
ServiceProviderCode = c.Code,
ServiceProviderName = c.Name,
SubSystemId = a.SubSystemId,
SubSystemCode = d.Key
})
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize)
.ToListAsync();
}
/// <inheritdoc />
public async Task<TrackContentVO?> GetTrackContentAsync(int subSystemId, string trackCode)
{
return await Context.Queryable<TrackContentEntity>()
.LeftJoin<TrackStatusEntity>((x, y) => x.TrackStatusId == y.Id)
.Where(x => x.SubSystemId == subSystemId && x.Code == trackCode)
.Select((x, y) => new TrackContentVO
{
TrackStatusId = x.TrackStatusId,
TrackStatus = y.Status,
TrackContent = x.Content,
TrackEnContent = x.EnContent,
IsCompleted = y.IsCompleted
})
.FirstAsync();
}
public async Task<List<TrackPullConfigVo>> GetAllPullConfigsAsync()
{
return await Context.Queryable<TrackPullConfigEntity>()
.LeftJoin<VServiceProviderEntity>((a, b) => a.ServiceProviderId == b.Id)
.LeftJoin<VSystemEntity>((a, b, c) => a.SubSystemId == c.Id)
.Select((a, b, c) => new TrackPullConfigVo
{
PullInterval = a.PullInterval,
ServiceProviderId = a.ServiceProviderId,
ServiceProviderCode = b.Code,
SubSystemCode = c.Key,
SubSystemId = c.Id
})
.ToListAsync();
}
/// <summary>
/// db context
/// </summary>
public ISqlSugarClient Context { get; set; }
}