using DOAN.Model.MES.order; using DOAN.Model.MES.order.Dto; using DOAN.Model.MES.Order.Dto; using DOAN.Model.MES.product; using DOAN.Service.MES.order.IService; using DOAN.Service.MES.Order.IService; using Infrastructure.Attribute; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DOAN.Service.MES.Order { [AppService(ServiceType = typeof(IDeliveryScheduleService), ServiceLifetime = LifeTime.Transient)] public class DeliveryScheduleService : BaseService, IDeliveryScheduleService { /// /// 获取交付进度 /// /// /// public List GetList(OrderPurchaseQueryDto parm) { var predicate = QueryExp(parm); var queryResult = Context.Queryable() .LeftJoin((o, w) => o.OrderNoMes == w.FeedOrder) .Where(predicate.ToExpression()) .Where((o, w) => !SqlFunc.IsNullOrEmpty(o.OrderNoMes)) .OrderBy((o, w) => o.Id) .Select((o, w) => new OrderScheduleDto { Id = o.Id, ImportDate = o.ImportDate, OrderNoMes = o.OrderNoMes, PurchaseOrderErp = o.PurchaseOrderErp, Poitem = o.Poitem, Variety = o.Variety, Specordindicator = o.Specordindicator, KdType = o.KdType, DocumentDate = o.DocumentDate, Seller = o.Seller, SalesArea = o.SalesArea, MaterialName = o.MaterialName, MaterialCode = o.MaterialCode, DemandQuantity = o.DemandQuantity, DeliveryDate = o.DeliveryDate, DeliveryQuantity = SqlFunc.Subqueryable() .Where(w => w.FeedOrder == o.OrderNoMes).Sum(it=>it.ShipmentNum), StartDate = o.StartDate, EndDate = o.EndDate, Orderindicator = o.Orderindicator, RouteCode = o.RouteCode, Status = o.Status, Remark = o.Remark, CreatedBy = o.CreatedBy, CreatedTime = o.CreatedTime, UpdatedBy = o.UpdatedBy, UpdatedTime = o.UpdatedTime, Children = SqlFunc.Subqueryable() .Where(w => w.FeedOrder == o.OrderNoMes) // 子查询,获取对应的工单数据 .ToList() }) .Distinct() .ToList(); return queryResult; } private static Expressionable QueryExp(OrderPurchaseQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.OrderNoMes), (o, w) => o.OrderNoMes.Contains(parm.OrderNoMes)) .AndIF(!string.IsNullOrEmpty(parm.PurchaseOrderErp), (o, w) => o.OrderNoMes.Contains(parm.PurchaseOrderErp)) .AndIF(parm.ImportDate != null && parm.ImportDate[0] > DateTime.MinValue, (o, w) => o.ImportDate >= parm.ImportDate[0]) .AndIF(parm.ImportDate != null && parm.ImportDate[1] > DateTime.MinValue, (o, w) => o.ImportDate <= parm.ImportDate[1]) .AndIF(parm.Orderindicator>-1,(o,w)=>o.Orderindicator==parm.Orderindicator) ; return predicate; } } }