117 lines
5.6 KiB
C#
117 lines
5.6 KiB
C#
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
|
||
using SJZY.Track.Domain.Dtos.Order;
|
||
using SJZY.Track.Domain.Queries;
|
||
using SJZY.Track.Domain.VEntities;
|
||
using SJZY.Track.Repository.VData.Entitys;
|
||
|
||
namespace SJZY.Track.Repository.Queries;
|
||
|
||
public class TrackOrderQueries : ISugarRepository, ITrackOrderQueries,
|
||
ITransientDependency
|
||
{
|
||
public ISqlSugarClient Context { get; set; }
|
||
|
||
public TrackOrderQueries()
|
||
{
|
||
Context = SqlsugarScopeBasic.GetContextSafely("default");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取分页的轨迹订单
|
||
/// </summary>
|
||
/// <param name="input"></param>
|
||
/// <returns></returns>
|
||
public async Task<UnifyPageResultDto<TrackOrderVO>> GetPageTrackOrder(GetPageTrackOrderInputVO input)
|
||
{
|
||
List<string> orderNoList = new List<string>();
|
||
List<int> questionTypeIds = new List<int>();
|
||
int ques = 0;
|
||
if (!input.OrderNos.IsNullOrWhiteSpace())
|
||
{
|
||
orderNoList = input.OrderNos!.Split(new[] { ',', ',', ':', ':' }).ToList();
|
||
}
|
||
|
||
if (input.TabType == 1)
|
||
{
|
||
questionTypeIds = new List<int> { 1, 4 };
|
||
ques = questionTypeIds.Sum();
|
||
}
|
||
else if (input.TabType == 2)
|
||
{
|
||
questionTypeIds = new List<int> { 2, 4 };
|
||
ques = questionTypeIds.Sum();
|
||
}
|
||
|
||
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(!orderNoList.IsNullOrEmpty(), (a, b, c) => orderNoList.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 && !questionTypeIds.IsNullOrEmpty(), (a, b, c) => (a.QuestionType & ques) > 0)
|
||
.OrderByDescending((a, b, c) => a.CreateTime)
|
||
.Select((a, b, c) => new TrackOrderVO
|
||
{
|
||
Id = a.Id,
|
||
OrderNumber = a.OrderNo,
|
||
OrderType = a.OrderType,
|
||
OrderTypeName = SqlFunc.IF(a.OrderType == 1).Return("干线提单").ElseIF(a.OrderType == 2).Return("小包运单")
|
||
.ElseIF(a.OrderType == 3)
|
||
.Return("箱/袋单").ElseIF(a.OrderType == 4).Return("FBA订单").End(""),
|
||
CustomerShortName = b.Abbreviation,
|
||
CustomerCode = b.Code,
|
||
CustomerId = a.CustomId,
|
||
QuestionType = a.QuestionType,
|
||
QuestionTypeName = SqlFunc.IF(a.QuestionType == 1).Return("异常").ElseIF(a.QuestionType == 2).Return("预警")
|
||
.End(""),
|
||
ProblemDescription = a.ProblemDescription,
|
||
ProblemDescriptionName = SqlFunc.IF(a.ProblemDescription == 1).Return("推送异常")
|
||
.ElseIF(a.ProblemDescription == 2).Return("推送预警").End(""),
|
||
//TrackTemplateNames = SqlFunc.Subqueryable<OrderTemplateEntity>()
|
||
// .LeftJoin<TrackTemplateEntity>((aa, bb) => aa.TrackTemplateId == bb.Id)
|
||
// .Where((aa, bb) => a.Id == aa.OrderId).SelectStringJoin((aa, bb) => bb.Name, ","),
|
||
|
||
//TrackTemplateIds = SqlFunc.Subqueryable<OrderTemplateEntity>()
|
||
// .LeftJoin<TrackTemplateEntity>((aa, bb) => aa.TrackTemplateId == bb.Id)
|
||
// .Where((aa, bb) => a.Id == aa.OrderId).SelectStringJoin((aa, bb) => bb.Id, ","),
|
||
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;
|
||
}
|
||
} |