private RecipeTemplate GetRCRecipeTempate(double chargeCurrent, double idleTime, double curr, RecipeTemplateServiceClass recipeTemplateService, StepTemplateServiceClass stepTemplateService) { try { List <RecipeTemplate> recTemplates = recipeTemplateService.Items.ToList(); //using (var dbContext = new AppDbContext()) //{ // rectemplist = dbContext.RecipeTemplates // .Include(recipeTemplate => recipeTemplate.Steps) // .ThenInclude(step => step.StepTemplate) // .ToList(); //} foreach (var rec in recTemplates) { rec.Steps = new ObservableCollection <Step>(rec.Steps.OrderBy(o => o.Order)); } var rectemp = recTemplates.SingleOrDefault(o => o.Steps.Count == 4 && o.Steps[0].StepTemplate.CurrentInput == chargeCurrent && o.Steps[0].StepTemplate.CurrentUnit == CurrentUnitEnum.C && o.Steps[0].StepTemplate.CutOffConditionValue == 1 && o.Steps[0].StepTemplate.CutOffConditionType == CutOffConditionTypeEnum.CRate && o.Steps[0].LoopLabel == null && o.Steps[1].StepTemplate.CurrentInput == 0 && //o.Steps[1].StepTemplate.CurrentUnit == CurrentUnitEnum.C && o.Steps[1].StepTemplate.CutOffConditionValue == idleTime && o.Steps[1].StepTemplate.CutOffConditionType == CutOffConditionTypeEnum.Time_s && o.Steps[1].LoopLabel == null && o.Steps[2].StepTemplate.CurrentInput == curr && o.Steps[2].StepTemplate.CurrentUnit == CurrentUnitEnum.mA && o.Steps[2].StepTemplate.CutOffConditionValue == 0 && //o.Steps[2].StepTemplate.CutOffConditionType == CutOffConditionTypeEnum.CRate o.Steps[2].LoopLabel == null && o.Steps[3].StepTemplate.CurrentInput == curr && o.Steps[3].StepTemplate.CurrentUnit == CurrentUnitEnum.mA && o.Steps[3].StepTemplate.CutOffConditionValue == 0 && //o.Steps[2].StepTemplate.CutOffConditionType == CutOffConditionTypeEnum.CRate o.Steps[3].LoopLabel == null ); if (rectemp != null) { return(rectemp); } //没找到,需要创建这个recipe template rectemp = CreateRCRecipeTemplate(chargeCurrent, idleTime, curr, recipeTemplateService, stepTemplateService); return(rectemp); } catch (Exception e) { MessageBox.Show(e.Message, "Get RC RecipeTempate Error!"); return(null); } }
public void RCSuperAdd(Program item, double chargeRate, double idleTime, List <double> currents, List <double> temperatures, RecipeTemplateServiceClass recipeTemplateService, StepTemplateServiceClass stepTemplateService) { var rectemplist = GetRCRecipeTemplatesByCurrents(chargeRate, idleTime, currents, recipeTemplateService, stepTemplateService); foreach (var temp in temperatures) { foreach (var rectemp in rectemplist) { var recRuntime = new Recipe(rectemp, item.Project.BatteryType); recRuntime.Temperature = temp; item.Recipes.Add(recRuntime); } } //item.Type = RC //To be implemented DomainAdd(item); DatabaseAdd(item); }
//internal void FixTemplates(Program prog) //{ // using (var uow = new UnitOfWork(new AppDbContext())) // { // foreach (var rec in prog.Recipes) // { // rec.RecipeTemplate = uow.RecipeTemplates.GetAll("StepV2s").Last(o => o.Name == rec.Name); // } // uow.Commit(); // } //} private List <RecipeTemplate> GetRCRecipeTemplatesByCurrents(double chargeRate, double idleTime, List <double> currents, RecipeTemplateServiceClass recipeTemplateService, StepTemplateServiceClass stepTemplateService) { var output = new List <RecipeTemplate>(); foreach (var curr in currents) { var rectemp = GetRCRecipeTempate(chargeRate, idleTime, curr, recipeTemplateService, stepTemplateService); output.Add(rectemp); } return(output); }
private RecipeTemplate CreateRCRecipeTemplate(double chargeCurrent, double idleTime, double curr, RecipeTemplateServiceClass recipeTemplateService, StepTemplateServiceClass stepTemplateService) { try { //using (var uow = new UnitOfWork(new AppDbContext())) //{ List <StepTemplate> stepTemplates = stepTemplateService.Items.ToList(); var chargesteptemp = stepTemplates.SingleOrDefault(o => o.CurrentInput == chargeCurrent && o.CurrentUnit == CurrentUnitEnum.C && o.CutOffConditionValue == 1 && o.CutOffConditionType == CutOffConditionTypeEnum.CRate); if (chargesteptemp == null) { chargesteptemp = CreateRCStepTemplate(chargeCurrent, CurrentUnitEnum.C, 1, CutOffConditionTypeEnum.CRate, stepTemplateService); //new StepTemplate() { CurrentInput = chargeCurrent, CurrentUnit = CurrentUnitEnum.C, CutOffConditionValue = 1, CutOffConditionType = CutOffConditionTypeEnum.CRate }; } var idlesteptemp = stepTemplates.SingleOrDefault(o => o.CurrentInput == 0 && o.CutOffConditionValue == idleTime && o.CutOffConditionType == CutOffConditionTypeEnum.Time_s); if (idlesteptemp == null) { idlesteptemp = CreateRCStepTemplate(0, CurrentUnitEnum.mA, idleTime, CutOffConditionTypeEnum.Time_s, stepTemplateService); //new StepTemplate() { CurrentInput = 0, CurrentUnit = CurrentUnitEnum.mA, CutOffConditionValue = idleTime, CutOffConditionType = CutOffConditionTypeEnum.Time_s }; } var dsgsteptemp = stepTemplates.SingleOrDefault(o => o.CurrentInput == curr && o.CutOffConditionValue == 0); if (dsgsteptemp == null) { dsgsteptemp = CreateRCStepTemplate(curr, CurrentUnitEnum.mA, 0, CutOffConditionTypeEnum.CRate, stepTemplateService); //new StepTemplate() { CurrentInput = curr, CurrentUnit = CurrentUnitEnum.mA, CutOffConditionValue = 0, CutOffConditionType = CutOffConditionTypeEnum.CRate }; } RecipeTemplate output; output = new RecipeTemplate() { Name = $"{curr / -1000}A" }; var step = new Step(chargesteptemp); output.Steps.Add(step); step = new Step(idlesteptemp); output.Steps.Add(step); step = new Step(dsgsteptemp); output.Steps.Add(step); step = new Step(idlesteptemp); output.Steps.Add(step); recipeTemplateService.SuperAdd(output); return(output); } catch (Exception e) { MessageBox.Show(e.Message, "Create RC RecipeTemplate Error!"); return(null); } }