//处理数据 public void DataHandle() { var prods = lotList.Where(w => w.Lot_Type == "Production").Select(s => s.ProdSpec_ID).Distinct(); foreach (var f in prods) { var cur = GetChartModelByProd(f, lotList_Prod_Cur); var ystd = GetChartModelByProd(f, lotList_Prod_Ystd); if (ystd.ChartEntities.Any()) { CurModels.Add(cur); YstdModels.Add(ystd); } } GetTableEntities(prods); var curOtherModels = new List <ReqRpt028ChartModel>(); var ystdOtherModels = new List <ReqRpt028ChartModel>(); var otherProds = lotList.Where(w => w.Lot_Type != "Production").Select(s => s.ProdSpec_ID).Distinct().Except(prods); foreach (var prod in otherProds) { var cur = GetChartModelByProd(prod, lotList_Other_Cur); var ystd = GetChartModelByProd(prod, lotList_Other_Ystd); if (ystd.ChartEntities.Any()) { curOtherModels.Add(cur); ystdOtherModels.Add(ystd); } } //计算OtherModel if (ystdOtherModels.Any()) { var CurOtherModel = GetOtherModelByOtherModels(curOtherModels); var YSTDOtherModel = GetOtherModelByOtherModels(ystdOtherModels); CurModels.Add(CurOtherModel); YstdModels.Add(YSTDOtherModel); } }
private void GetTableEntities(IEnumerable <string> prods) { //TableEntities foreach (var f in prods) { double keyCt = 0; double MonthCt = 0; var outs = outList.Where(w => w.ProdSpec_ID == f); var curModel = CurModels.Where(w => w.Product == f).First(); var ystdModel = YstdModels.Where(w => w.Product == f).First(); var curTable = new ReqRpt028TableEntity { Product = f, AlreadyOut = outs.Any() ? outs.First().CurOut : 0, TargetOut = outs.Any() ? outs.First().TargetOut : 0 }; var ystdTable = new ReqRpt028TableEntity { Product = f, AlreadyOut = outs.Any() ? outs.First().YstdOut : 0, TargetOut = curTable.TargetOut }; double remainDays = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month) - DateTime.Now.Day + 1; //curTable.ForecastOut = curModel.ChartEntities.Where(w => w.RemainCT <= remainDays).First().AccWip; var belowCurKeys = curModel.ChartEntities.Where(w => w.RemainCT <= remainDays); var aboveCurKeys = curModel.ChartEntities.Where(w => w.RemainCT >= remainDays); curTable.ForecastOut = belowCurKeys.Sum(s => s.Wip); curTable.KeyStage = aboveCurKeys.Any() ? aboveCurKeys.Last().Stage : curModel.ChartEntities.First().Stage; keyCt = aboveCurKeys.Any() ? aboveCurKeys.Last().RemainCT : curModel.ChartEntities.First().RemainCT; //目标剩余量 var remainCurTaget = curTable.AlreadyOut - curTable.TargetOut; if (remainCurTaget >= 0) { curTable.MotherStage = "wafer out"; MonthCt = 0; } else { var acc = 0; for (var i = curModel.ChartEntities.Count() - 1; i >= 0; i--) { acc += curModel.ChartEntities[i].Wip; if (remainCurTaget + acc >= 0) { curTable.MotherStage = curModel.ChartEntities[i].Stage; MonthCt = curModel.ChartEntities[i].RemainCT; break; } } if (string.IsNullOrEmpty(curTable.MotherStage)) { curTable.MotherStage = "wafer start"; MonthCt = curModel.ChartEntities.First().RemainCT; } } curTable.Day = keyCt - MonthCt; keyCt = 0; MonthCt = 0; //ystdTable.ForecastOut=ystdModel.ChartEntities.Where(w => w.RemainCT <= remainDays).First().AccWip; var belowYstKeys = ystdModel.ChartEntities.Where(w => w.RemainCT <= remainDays); var aboveYstKeys = ystdModel.ChartEntities.Where(w => w.RemainCT >= remainDays); ystdTable.ForecastOut = belowYstKeys.Sum(s => s.Wip); ystdTable.KeyStage = aboveYstKeys.Any() ? aboveYstKeys.Last().Stage : ystdModel.ChartEntities.First().Stage; keyCt = aboveYstKeys.Any() ? aboveYstKeys.Last().RemainCT : ystdModel.ChartEntities.First().RemainCT; //目标剩余量 var remainYstTaget = ystdTable.AlreadyOut - ystdTable.TargetOut; if (remainYstTaget >= 0) { ystdTable.MotherStage = "wafer out"; MonthCt = 0; } else { var acc = 0; for (var i = ystdModel.ChartEntities.Count() - 1; i >= 0; i--) { acc += ystdModel.ChartEntities[i].Wip; if (remainYstTaget + acc >= 0) { ystdTable.MotherStage = ystdModel.ChartEntities[i].Stage; MonthCt = ystdModel.ChartEntities[i].RemainCT; break; } } if (string.IsNullOrEmpty(ystdTable.MotherStage)) { ystdTable.MotherStage = "wafer start"; MonthCt = ystdModel.ChartEntities.First().RemainCT; } } ystdTable.Day = keyCt - MonthCt; CurTableEntities.Add(curTable); YstdTableEntities.Add(ystdTable); } }