public void RunTest() { CompositeResolver.RegisterAndSetAsDefault(NativeDateTimeResolver.Instance, StandardResolver.Instance); PrepareUnitTest(); Config.Directories.ResultStorageDirectory = WorkingDirectory.Dir; Config.Directories.CalcServerLpgDirectory = WorkingDirectory.Dir; // ReSharper disable twice AssignNullToNotNullAttribute HouseCreationAndCalculationJob hcj = new HouseCreationAndCalculationJob(Scenario.Present().ToString(), "2017", "trafokreis"); HouseData hd = new HouseData("houseguid", "HT01", 1000, 1000, "houseName"); HouseholdData hhd = new HouseholdData("householdguid", 2000, ElectricCarUse.UseElectricCar, "householdname", ElectricCarProvider.ChargingStationSet, ElectricCarProvider.TransportationDevicesOneCar, ElectricCarProvider.TravelRouteSet, new List <TransportationDistanceModifier>(), HouseholdDataSpecifictionType.ByPersons); hd.Households.Add(hhd); hhd.UseElectricCar = ElectricCarUse.UseElectricCar; hhd.TransportationDeviceSet = ElectricCarProvider.TransportationDevicesOneCar; hhd.TravelRouteSet = ElectricCarProvider.TravelRouteSet; hhd.ChargingStationSet = ElectricCarProvider.ChargingStationSet; hhd.HouseholdDataPersonSpecification = new HouseholdDataPersonSpecification(new List <PersonData> { new PersonData(30, Gender.Male) }); hcj.House = hd; List <HouseCreationAndCalculationJob> houseJobs = new List <HouseCreationAndCalculationJob>(); houseJobs.Add(hcj); FileHelpers.CopyRec(Config.Directories.LPGReleaseDirectory, WorkingDirectory.Dir, Logger, true); var endTime = new DateTime(Constants.PresentSlice.DstYear, 1, 10); ProfileGenerationRo pgro = new ProfileGenerationRo(); HouseProcessor.WriteDistrictsForLPG(houseJobs, WorkingDirectory.DirDi, Logger, Constants.PresentSlice, endTime, pgro); string districtsDir = WorkingDirectory.Combine("Districts"); var districtsDi = new DirectoryInfo(districtsDir); var files = districtsDi.GetFiles("*.json"); void RunOneFile(FileInfo myfi) { ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = WorkingDirectory.Combine("simulationengine.exe"); psi.UseShellExecute = true; psi.WorkingDirectory = WorkingDirectory.Dir; psi.Arguments = "ProcessHouseJob -j \"" + myfi.FullName + "\""; Info("running " + psi.FileName + " " + psi.Arguments); using (Process p = new Process()) { p.StartInfo = psi; p.Start(); p.WaitForExit(); } } foreach (var housejob in files) { RunOneFile(housejob); } DBDto dbDto = new DBDto(new List <House>(), new List <Hausanschluss>(), new List <Car>(), new List <Household>(), new List <RlmProfile>()); CachingLPGProfileLoader ca = new CachingLPGProfileLoader(Logger, dbDto); List <int> isns = new List <int>(); isns.Add(10); CarDistanceEntry cde = new CarDistanceEntry("houseguid", "householdguid", "carguid", 20, 20, isns, 10, "haguid", "sourceguid", "cdename", CarType.Electric); HouseComponentRo hcro = new HouseComponentRo("housecomponent", "componeenttype", 1000, 200, "processingstatus", "isns", "standort", 0); ProviderParameterDto ppd = new ProviderParameterDto(cde, WorkingDirectory.Dir, hcro); SqlConnectionPreparer scp = new SqlConnectionPreparer(Config); MyDb db = scp.GetDatabaseConnection(Stage.Testing, Constants.PresentSlice); SaveableEntry <Profile> sa = SaveableEntry <Profile> .GetSaveableEntry(db, SaveableEntryTableType.LPGProfile, Logger); sa.MakeTableForListOfFieldsIfNotExists(true); string dstDir = Path.Combine(WorkingDirectory.Dir, hcj.Trafokreis, hcj.House.Name); FileHelpers.CopyRec(WorkingDirectory.Combine("Results"), dstDir, Logger, true); //normal electricity test and cache test Info("================== "); Info("electricity"); Info("================== "); var profElec1 = ca.LoadLPGProfile(ppd, hcj.Trafokreis, "Electricity", sa, hhd.HouseholdGuid, out var profsource, hcj.House.Name, Config, true); Info("Source: " + profsource); Assert.NotNull(profElec1); Assert.NotNull(profsource); var profElecCache = ca.LoadLPGProfile(ppd, hcj.Trafokreis, "Electricity", sa, hhd.HouseholdGuid, out var profsourceCache, hcj.House.Name, Config, true); Info("Source 2: " + profsourceCache); Assert.NotNull(profsourceCache); Assert.NotNull(profsource); profElec1.Should().BeEquivalentTo(profElecCache, options => options.Excluding(ctx => ctx.SelectedMemberPath.EndsWith("BinaryProfile"))); //Car Charging Electricity electricity test and cache test Info("================== "); Info("Car Charging Electricity electricity"); Info("================== "); SaveableEntry <Profile> sa2 = SaveableEntry <Profile> .GetSaveableEntry(db, SaveableEntryTableType.EvProfile, Logger); sa2.MakeCleanTableForListOfFields(true); var prof2 = ca.LoadLPGProfile(ppd, hcj.Trafokreis, "Car Charging Electricity", sa2, hhd.HouseholdGuid, out var profsource2, hcj.House.Name, Config, true); Info("Source Wp 1: " + profsource2); Assert.NotNull(prof2); Assert.NotNull(profsource2); var prof3 = ca.LoadLPGProfile(ppd, hcj.Trafokreis, "Car Charging Electricity", sa2, hhd.HouseholdGuid, out var profsource3, hcj.House.Name, Config, true); Info("Source Wp 2: " + profsource3); Assert.NotNull(prof3); Assert.NotNull(profsource3); prof2.Should().BeEquivalentTo(prof3, options => options.Excluding(ctx => ctx.SelectedMemberPath.EndsWith("BinaryProfile"))); }
public bool PrepareLoadProfileIfNeeded([NotNull] ProviderParameterDto parameters) { CarDistanceEntry cde = (CarDistanceEntry)parameters.HouseComponent; Car myCar = _dbDto.Cars.Single(x => x.Guid == cde.CarGuid); parameters.HouseComponentResultObject.CarStatus = "Gasoline, not analyzed further"; if (myCar.RequiresProfile == CarProfileRequirement.NoProfile) { return(true); } Hausanschluss ha = _dbDto.Hausanschlusse.Single(x => x.Guid == cde.HausAnschlussGuid); parameters.HouseComponentResultObject.CarStatus = "Electric"; parameters.HouseComponentResultObject.CommutingDistance = cde.CommutingDistance; parameters.HouseComponentResultObject.OtherDrivingDistance = cde.FreizeitDistance; Household flaHousehold = _dbDto.Households.FirstOrDefault(x => x.Guid == cde.HouseholdGuid); if (flaHousehold == null) { parameters.HouseComponentResultObject.CarStatus += ", no household"; throw new FlaException("no household found"); } var house = _dbDto.Houses.FirstOrDefault(x => x.HouseGuid == cde.HouseGuid); if (house == null) { throw new FlaException("no house found"); } HouseholdData householdData = null; if (_housesToBeCreated.Count > 0) { var houseJob = _housesToBeCreated.FirstOrDefault(x => x.House.HouseGuid == ha.HouseGuid); if (houseJob == null) { parameters.HouseComponentResultObject.CarStatus += ", no house"; throw new FlaException("no house found"); } householdData = houseJob.House.Households.FirstOrDefault(x => x.HouseholdGuid == flaHousehold.HouseholdKey); if (householdData == null) { parameters.HouseComponentResultObject.CarStatus += ", no household guid"; throw new FlaException("no household for household guid " + cde.HouseholdGuid); } //set lpg parameters householdData.UseElectricCar = ElectricCarUse.UseElectricCar; //find number of cars var householdCars = _dbDto.Cars.Where(x => x.HouseholdGuid == cde.HouseholdGuid).ToList(); switch (householdCars.Count) { case 1: //use lpg profile for a single car householdData.TransportationDeviceSet = TransportationDevicesTwoCar; break; case 2: //use lpg profile for a single car householdData.TransportationDeviceSet = TransportationDevicesTwoCar; break; case 3: // use lpg profile for a single car // todo: fix this and put in the right transportation device set householdData.TransportationDeviceSet = TransportationDevicesTwoCar; break; case 4: //use lpg profile for a single car //todo: fix this and put in the right transportation device set householdData.TransportationDeviceSet = TransportationDevicesTwoCar; break; default: throw new FlaException("Household with " + householdCars.Count + " cars is missing"); } householdData.TravelRouteSet = TravelRouteSet; householdData.ChargingStationSet = ChargingStationSet; if (householdData.TransportationDistanceModifiers == null) { householdData.TransportationDistanceModifiers = new List <TransportationDistanceModifier>(); } householdData.TransportationDistanceModifiers.Add(new TransportationDistanceModifier("Work", "Car", cde.CommutingDistance * 1000)); householdData.TransportationDistanceModifiers.Add(new TransportationDistanceModifier("Entertainment", "Car", cde.FreizeitDistance * 1000)); parameters.HouseComponentResultObject.CarStatus += ", asking for repare with distances commuting: " + cde.CommutingDistance + ", free time: " + cde.FreizeitDistance + " km"; } if (Services.RunningConfig.LpgPrepareMode == LpgPrepareMode.PrepareWithFullLpgLoad) { Profile lpgProfile = null; try { lpgProfile = _lpgProfileLoader.LoadLPGProfile(parameters, ha.Trafokreis, LoadtypetoSearchFor, _saveableEntry, flaHousehold.HouseholdKey, out _, house.ComplexName, Services.RunningConfig); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) { #pragma warning restore CA1031 // Do not catch general exception types Error("trying to load lpg profile: " + ex.Message); parameters.HouseComponentResultObject.LPGErrors = "trying to load lpg profile failed: " + ex.Message; } // ReSharper disable PossibleNullReferenceException if (_housesToBeCreated.Count > 0) { if (lpgProfile != null) { householdData.IsCarProfileCalculated = true; parameters.HouseComponentResultObject.ProcessingStatus = "Found LPG profile on full check"; } else { householdData.IsCarProfileCalculated = false; parameters.HouseComponentResultObject.ProcessingStatus = "Missing LPG profile on full check"; } } // ReSharper restore PossibleNullReferenceException } else if (Services.RunningConfig.LpgPrepareMode == LpgPrepareMode.PrepareWithOnlyNamecheck) { // ReSharper disable PossibleNullReferenceException if (_housesToBeCreated.Count > 0) { if (_saveableEntry.CheckForName(flaHousehold.HouseholdKey, Services.Logger)) { householdData.IsHouseholdProfileCalculated = true; parameters.HouseComponentResultObject.ProcessingStatus = "Found LPG profile on name check"; } else { householdData.IsHouseholdProfileCalculated = false; parameters.HouseComponentResultObject.ProcessingStatus = "Miissing LPG profile on name check"; } } // ReSharper restore PossibleNullReferenceException } else { throw new FlaException("Unknown lpg prepare mode"); } return(true); }
public bool PrepareLoadProfileIfNeeded([NotNull] ProviderParameterDto parameters) { if (parameters.HouseComponent.HouseComponentType != HouseComponentType.Household) { throw new FlaException("Was not household: " + parameters.HouseComponent.HouseComponentType); } Household hh = (Household)parameters.HouseComponent; Hausanschluss ha = _dbDto.Hausanschlusse.Single(x => x.Guid == hh.HausAnschlussGuid); var houseJob = _housesToBeCreated.FirstOrDefault(x => x.House.HouseGuid == hh.HouseGuid); if (houseJob == null) { var flahouse = _dbDto.Houses.Single(x => x.Guid == hh.HouseGuid); houseJob = new HouseCreationAndCalculationJob(Slice.DstScenario.ToString(), Slice.DstYear.ToString(), ha.Trafokreis); houseJob.House = new HouseData(hh.HouseGuid, "HT01", 0, 0, flahouse.ComplexName); _housesToBeCreated.Add(houseJob); } HouseholdData hd = new HouseholdData(hh.HouseholdKey, hh.EffectiveEnergyDemand, ElectricCarUse.NoElectricCar, hh.Name, null, null, null, null, HouseholdDataSpecifictionType.ByPersons); hd.IsCarProfileCalculated = true; hd.HouseholdDataPersonSpecification = new HouseholdDataPersonSpecification(new List <PersonData>()); if (hh.Occupants.Count == 0) { throw new FlaException("No occupants in the household " + hh.Name); } foreach (var occupant in hh.Occupants) { hd.HouseholdDataPersonSpecification.Persons.Add(new PersonData(occupant.Age, (Gender)occupant.Gender)); } House house = _dbDto.Houses.First(x => x.Guid == hh.HouseGuid); if (Services.RunningConfig.LpgPrepareMode == LpgPrepareMode.PrepareWithFullLpgLoad) { Profile lpgProfile = null; try { lpgProfile = _lpgloader.LoadLPGProfile(parameters, ha.Trafokreis, LoadtypetoSearchFor, _saveableEntry, hh.HouseholdKey, out _, house.ComplexName, Services.RunningConfig); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) { #pragma warning restore CA1031 // Do not catch general exception types parameters.HouseComponentResultObject.LPGErrors = "trying to load lpg profile failed: " + ex.Message; Error("trying to load lpg profile: " + ex.Message); } if (lpgProfile != null) { hd.IsHouseholdProfileCalculated = true; } else { hd.IsHouseholdProfileCalculated = false; } } else if (Services.RunningConfig.LpgPrepareMode == LpgPrepareMode.PrepareWithOnlyNamecheck) { if (_saveableEntry.CheckForName(hh.HouseholdKey, Services.Logger)) { hd.IsHouseholdProfileCalculated = true; } else { hd.IsHouseholdProfileCalculated = false; } } else { throw new FlaException("Unknown lpg prepare mode"); } houseJob.House.Households.Add(hd); return(true); }