using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; 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 Infrastructure.Converter; namespace DOAN.Service.MES.Order { [AppService( ServiceType = typeof(IDeliveryScheduleService), ServiceLifetime = LifeTime.Transient )] public class DeliveryScheduleService : BaseService, IDeliveryScheduleService { /// /// 获取交付进度 /// /// /// public List GetList(OrderPurchaseQueryDto parm) { // 日期处理 if (parm != null && parm.ImportDate != null && parm.ImportDate.Length > 0) { if (parm.ImportDate[0] > DateTime.MinValue) { parm.ImportDate[0] = DOANConvertDate.ConvertLocalDate(parm.ImportDate[0]); } if (parm.ImportDate[1] > DateTime.MinValue) { parm.ImportDate[1] = DOANConvertDate.ConvertLocalDate(parm.ImportDate[1]); } } var predicate = QueryExp(parm); var queryResult = Context .Queryable() .LeftJoin((o, w) => o.OrderNoMes == w.CustomerOrder) .Where(predicate.ToExpression()) .Where((o, w) => !SqlFunc.IsNullOrEmpty(o.OrderNoMes)) .OrderBy((o, w) => o.OrderNoMes) .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, DeliveryQuantity = o.DeliveryQuantity, 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.CustomerOrder == 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.PurchaseOrderErp.Contains(parm.PurchaseOrderErp) ) .AndIF( !string.IsNullOrEmpty(parm.MaterialCode), (o, w) => o.MaterialCode.Contains(parm.MaterialCode) ) .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 > -2, (o, w) => o.Orderindicator == parm.Orderindicator); return predicate; } } }