using DOAN.Model.MES.base_; using DOAN.Model.MES.bigscreen.Dto; using DOAN.Model.MES.dev; using DOAN.Model.MES.mm; using DOAN.Model.Mobile.Dto; using DOAN.Service.MES.bigScreen.IService; using DOAN.Service.MES.dev.IService; using Infrastructure.Attribute; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Runtime.InteropServices.JavaScript.JSType; namespace DOAN.Service.MES.bigScreen { /// /// 备料进度大屏 /// [AppService(ServiceType = typeof(IMaterialProgressService), ServiceLifetime = LifeTime.Transient)] public class MaterialProgressService : BaseService, IMaterialProgressService { /// /// 查看备料进度大屏 /// /// /// public List ViewMaterialParationProgress(DateTime dateTime) { var RequireMaterial = Context.Queryable().LeftJoin((r, p) => r.Code == p.LineCode) .Where((r, p) => p.RequireDate == dateTime|| p.RequireDate ==null) .Select((r, p) => new { LineCode = r.Code, LineName = r.Name, MaterialCode = p.MaterialCode, MaterialName = p.MaterialName, PlanNum = p.RequireNum }).ToList(); var ActualNumMaterial = Context.Queryable().LeftJoin((r, t) => r.Code == t.LineCode) .LeftJoin((r, t, i) => t.TaskCode == i.FkTaskCode) .Where((r, t, i) => t.TaskDate == dateTime) .GroupBy((r, t, i) => new { r.Code,r.Name,i.MaterialCode, i.MaterialName }) .Select((r, t, i) => new { LineCode = r.Code, LineName = r.Name, MaterialCode = i.MaterialCode, MaterialName = i.MaterialName, ActualNum = SqlFunc.AggregateSum(i.Quantity), }).ToList(); List MaterialProgressDto2 = new List(); foreach (var r in RequireMaterial) { MaterialProgressDto2 progressDto2 = new MaterialProgressDto2(); progressDto2.Date = dateTime; progressDto2.LineCode = r.LineCode; progressDto2.LineName = r.LineName; progressDto2.MaterialCode = r.MaterialCode; progressDto2.MaterialName = r.MaterialName; progressDto2.PlanNum = r.PlanNum; progressDto2.ActualNum = ActualNumMaterial .Where(it => it.LineCode == progressDto2.LineCode) .Where(it => it.MaterialCode == progressDto2.MaterialCode).Select(it => it.ActualNum).FirstOrDefault(); MaterialProgressDto2.Add(progressDto2); } return MaterialProgressDto2.GroupBy(it => new { it.Date, it.LineCode, it.LineName }).Select(group => new MaterialProgressDto() { Date = group.Key.Date, LineCode = group.Key.LineCode, LineName = group.Key.LineName, materialInfos = group.Select(item => new MaterialInfo { MaterialCode = item.MaterialCode, MaterialName = item.MaterialName, PlanNum =item.PlanNum, ActualNum = item.ActualNum }).ToList() }).ToList(); } } }