using System; using System.Collections.Generic; using System.Data.Entity; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL; using Tango.BL.Builders; using Tango.BL.Entities; using Tango.Core; using Tango.Integration.Operation; using Z.EntityFramework.Plus; namespace Tango.JobRunsGenerator { class Program { static void Main(string[] args) { DataSource dataSource = new DataSource(); dataSource.Catalog = "Tango_DEV"; dataSource.Address = "twine.database.windows.net"; dataSource.IntegratedSecurity = false; dataSource.UserName = "Roy"; dataSource.Password = "Aa123456"; using (ObservablesContext db = ObservablesContext.CreateDefault(dataSource)) { var count = db.JobRuns.Where(x => x.JobGuid != null).Count(); int index = 0; int saveIndex = 0; var runsGroup = db.JobRuns.Where(x => x.JobGuid != null).GroupBy(x => x.JobGuid).ToList(); foreach (var runGroup in runsGroup) { var runs = runGroup; var firstRun = runs.First(); var job = new JobBuilder(db).Set(x => x.Guid == firstRun.JobGuid).WithSegments().WithBrushStops().WithRML().Build(); if (job == null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"Job '{firstRun.JobGuid}' was not found on the database!"); Console.ForegroundColor = ConsoleColor.Gray; continue; } var machine = new MachineBuilder(db).Set(job.MachineGuid).WithConfiguration().Build(); foreach (var segment in job.Segments) { foreach (var stop in segment.BrushStops) { stop.SetLiquidVolumes(machine.Configuration, job.Rml, job.Rml.GetActiveProcessGroup().ProcessParametersTables.First()); } } foreach (var run in runs) { Console.WriteLine($"Fixing job {job.Name}... ({index++}/{count})"); run.MachineGuid = job.MachineGuid; run.JobSource = job.Source; if (run.JobLength == 0) run.JobLength = job.LengthIncludingNumberOfUnits; if (run.JobName == null) run.JobName = job.Name; if (run.RmlGuid == null) run.RmlGuid = job.RmlGuid; if (run.JobString == null) run.JobString = job.ToJobFileWhenLoaded().ToString(); if (run.LiquidQuantityString == null) run.LiquidQuantities = MachineOperator.CreateJobRunLiquidQuantitiesUsingIntegral(job, machine.Configuration, job.Rml.GetActiveProcessGroup().ProcessParametersTables.First(), run.EndPosition, job.LengthIncludingNumberOfUnits); if (run.UserGuid == null) run.UserGuid = job.UserGuid; if (run.UploadingStartDate == null) run.UploadingStartDate = run.StartDate; if (run.HeatingStartDate == null) run.HeatingStartDate = run.StartDate; if (run.ActualStartDate == null) run.ActualStartDate = run.StartDate; run.IsGradient = job.Segments.Any(x => x.BrushStops.Count > 1); //Set new liquid quantities. if (run.CyanQuantity == 0 && run.MagentaQuantity == 0 && run.YellowQuantity == 0 && run.BlackQuantity == 0 && run.TransparentQuantity == 0 && run.LubricantQuantity == 0 && run.CleanerQuantity == 0) { //Cyan var cyan = run.LiquidQuantities.FirstOrDefault(x => x.LiquidType == BL.Enumerations.LiquidTypes.Cyan); run.CyanQuantity = cyan != null ? cyan.Quantity : 0; //Magenta var magenta = run.LiquidQuantities.FirstOrDefault(x => x.LiquidType == BL.Enumerations.LiquidTypes.Magenta); run.MagentaQuantity = magenta != null ? magenta.Quantity : 0; //Yellow var yellow = run.LiquidQuantities.FirstOrDefault(x => x.LiquidType == BL.Enumerations.LiquidTypes.Yellow); run.YellowQuantity = yellow != null ? yellow.Quantity : 0; //Black var black = run.LiquidQuantities.FirstOrDefault(x => x.LiquidType == BL.Enumerations.LiquidTypes.Black); run.BlackQuantity = black != null ? black.Quantity : 0; //TI var ti = run.LiquidQuantities.FirstOrDefault(x => x.LiquidType == BL.Enumerations.LiquidTypes.Transparent); run.TransparentQuantity = ti != null ? ti.Quantity : 0; //Lubricant var lubricant = run.LiquidQuantities.FirstOrDefault(x => x.LiquidType == BL.Enumerations.LiquidTypes.Lubricant); run.LubricantQuantity = lubricant != null ? lubricant.Quantity : 0; //Cleaner var cleaner = run.LiquidQuantities.FirstOrDefault(x => x.LiquidType == BL.Enumerations.LiquidTypes.Cleaner); run.CleanerQuantity = cleaner != null ? cleaner.Quantity : 0; } saveIndex++; if (saveIndex > 100) { saveIndex = 0; Console.WriteLine("Saving changes..."); db.SaveChanges(); } } } Console.WriteLine("Saving changes..."); db.SaveChanges(); Console.WriteLine("Done!"); Console.ReadLine(); } } } }