/// <summary> /// Nöbetlerin tekrar tekrar yazılabilmesi için her çözüm sonrasında /// aktif sonuçlardaki mevcut kayıtlar silinip yerine yeni sonuçlar eklenir. /// Eczane Nöbet Çok Grup Data Model için /// </summary> /// <param name="data"></param> public void EczaneNobetCozAktifiGuncelle(AlanyaDataModelEski data) { var aktifSonuclar = _eczaneNobetSonucAktifService.GetSonuclar2(data.NobetUstGrupId); var guncellenecekSonuclar = aktifSonuclar.Where(x => data.NobetGruplar.Select(s => s.Id).Contains(x.NobetGrupId)); var yeniSonuclar = _eczaneNobetAlanyaOptimization.Solve(data); #region çözüm süresi var timeSpan = new TimeSpan(); if (yeniSonuclar.ResultModel.Count > 0) { timeSpan = yeniSonuclar.CozumSuresi; var amacFonksiyonu = yeniSonuclar.ObjectiveValue; } #endregion //gelen datadaki nöbet grup id aktif sonuçlarda varsa o nöbet gruba ait önceki sonuçları sil AktiftekiArtiklariSil(data.NobetUstGrupId); //yeni sonuçları ekle _eczaneNobetSonucAktifService.CokluEkle(yeniSonuclar.ResultModel); #region aynı gün nöbet tutan eczaneler için //çözülen grubun sonuçları aktifSonuclar = _eczaneNobetSonucAktifService.GetSonuclar2(data.NobetUstGrupId); //aynı aydaki diğer grupların sonuçları var ayniAydakiDigerGruplarinSonuclari = _eczaneNobetSonucService.GetSonuclar(data.BaslangicTarihi, data.BitisTarihi, data.NobetUstGrupId); var ayIcindekiTumSonuclar = aktifSonuclar.Union(ayniAydakiDigerGruplarinSonuclari).ToList(); var ayIcindeCozulenNobetGruplar = ayIcindekiTumSonuclar.Select(s => s.NobetGrupId).Distinct(); var ayIcindeAyniGunNobet = _nobetUstGrupKisitService.GetKisitPasifMi("ayIcindeAyniGunNobet", data.NobetUstGrupId); if (ayIcindeAyniGunNobet && ayIcindeCozulenNobetGruplar.Count() > 1) { var ayIcindeAyniGunNobetTutanEczaneler = new List <EczaneCiftGrup>(); ayIcindeAyniGunNobetTutanEczaneler = _eczaneNobetOrtakService.GetCiftGrupluEczaneler(ayIcindekiTumSonuclar, 2); var indisId = data.AyIcindeAyniGunNobetTutanEczaneler.Select(s => s.Id).LastOrDefault(); foreach (var item in ayIcindeAyniGunNobetTutanEczaneler) { data.AyIcindeAyniGunNobetTutanEczaneler .Add(new EczaneCiftGrup { Id = indisId + item.Id, EczaneId = item.EczaneId, BirlikteNobetTutmaSayisi = item.BirlikteNobetTutmaSayisi }); } //ay içinde grup olan eczane varsa bu sayı bitene iterasyon yapılıyor if (ayIcindeAyniGunNobetTutanEczaneler.Count > 0) { data.CozumItereasyon.IterasyonSayisi++; EczaneNobetCozAktifiGuncelle(data); } } #endregion }