/// <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 }
/// <summary> /// Her çözüm sonrasında aktif sonuçlardaki mevcut kayıtlar silinip yerine yeni sonuçlar eklenir. /// </summary> /// <param name="data"></param> public EczaneNobetSonucModel EczaneNobetCozAktifiGuncelle(MersinMerkezDataModelV2 data) { var yeniSonuclar = _eczaneNobetMersinMerkezOptimizationV2.Solve(data); AktiftekiArtiklariSil(data.NobetUstGrupId); //yeni sonuçları ekle _eczaneNobetSonucAktifService.CokluEkle(yeniSonuclar.ResultModel); return(yeniSonuclar); }
/// <summary> /// Her çözüm sonrasında aktif sonuçlardaki mevcut kayıtlar silinip yerine yeni sonuçlar eklenir. /// </summary> /// <param name="data"></param> //[TransactionScopeAspect] public EczaneNobetSonucModel EczaneNobetCozAktifiGuncelle(KirikhanDataModel data) { var mevcutSonuclar = _eczaneNobetSonucAktifService.GetDetaylar2(data.NobetUstGrupId); var guncellenecekSonuclar = mevcutSonuclar .Where(x => data.NobetGruplar.Select(s => s.Id).Contains(x.NobetGrupId)) .Select(s => s.Id).ToArray(); var yeniSonuclar = _eczaneNobetKirikhanOptimization.Solve(data); //gelen datadaki nöbet grup id aktif sonuçlarda varsa o nöbet gruba ait önceki sonuçları sil _eczaneNobetSonucAktifService.CokluSil(guncellenecekSonuclar); AktiftekiArtiklariSil(data.NobetUstGrupId); //yeni sonuçları ekle _eczaneNobetSonucAktifService.CokluEkle(yeniSonuclar.ResultModel); return(yeniSonuclar); }
/// <summary> /// Her çözüm sonrasında aktif sonuçlardaki mevcut kayıtlar silinip yerine yeni sonuçlar eklenir. /// </summary> /// <param name="data"></param> public EczaneNobetSonucModel EczaneNobetCozAktifiGuncelle(MersinMerkezDataModelV2 data) { var mevcutSonuclar = _eczaneNobetSonucAktifService.GetDetaylar2(data.NobetUstGrupId); var guncellenecekSonuclar = mevcutSonuclar .Where(x => data.NobetGruplar.Select(s => s.Id).Contains(x.NobetGrupId)) .Select(s => s.Id).ToArray(); var yeniSonuclar = _eczaneNobetMersinMerkezOptimizationV2.Solve(data); _eczaneNobetSonucAktifService.CokluSil(guncellenecekSonuclar); AktiftekiArtiklariSil(data.NobetUstGrupId); //yeni sonuçları ekle _eczaneNobetSonucAktifService.CokluEkle(yeniSonuclar.ResultModel); return(yeniSonuclar); }
/// <summary> /// Her çözüm sonrasında aktif sonuçlardaki mevcut kayıtlar silinip yerine yeni sonuçlar eklenir. /// </summary> /// <param name="data"></param> //[TransactionScopeAspect] public void EczaneNobetCozAktifiGuncelle(MersinMerkezDataModel data) { var mevcutSonuclar = _eczaneNobetSonucAktifService.GetSonuclar2(data.Yil, data.Ay, data.NobetUstGrupId); var guncellenecekSonuclar = mevcutSonuclar .Where(x => data.NobetGruplar.Select(s => s.Id).Contains(x.NobetGrupId)) .Select(s => s.Id).ToArray(); var yeniSonuclar = _eczaneNobetMersinMerkezOptimization.Solve(data); if (yeniSonuclar.ResultModel.Count > 0) { var cozumSuresi = yeniSonuclar.CozumSuresi; var amacFonksiyonu = yeniSonuclar.ObjectiveValue; } //gelen datadaki nöbet grup id aktif sonuçlarda varsa o nöbet gruba ait önceki sonuçları sil //foreach (var yeniSonuc in guncellenecekSonuclar) //{ // _eczaneNobetSonucAktifService.Delete(yeniSonuc.Id); //} _eczaneNobetSonucAktifService.CokluSil(guncellenecekSonuclar); AktiftekiArtiklariSil(data.NobetUstGrupId); //yeni sonuçları ekle //foreach (var yeniSonuc in yeniSonuclar.ResultModel) //{ // //_eczaneNobetSonucAktifService.Insert(yeniSonuc); //} _eczaneNobetSonucAktifService.CokluEkle(yeniSonuclar.ResultModel); #region aynı gün nöbet tutan eczaneler için /* * var ayniGunNobetTutmasiTakipEdilecekGruplar = new List<int> { 20, 21, 22 }; * var nobetGruplar = data.NobetGruplar.Where(w => ayniGunNobetTutmasiTakipEdilecekGruplar.Contains(w.Id)).Select(s => s.Id).ToList(); * if (nobetGruplar.Count() > 0) * { * //çözülen grubun sonuçları * mevcutSonuclar = _eczaneNobetSonucAktifService.GetSonuclar2(data.Yil, data.Ay, data.NobetUstGrupId); * * //aynı aydaki diğer grupların sonuçları * var ayniAydakiDigerGruplarinSonuclari = _eczaneNobetSonucService.GetSonuclar2(data.Yil, data.Ay, data.NobetUstGrupId) * .Where(w => ayniGunNobetTutmasiTakipEdilecekGruplar.Contains(w.NobetGrupId)).ToList(); * var ayIcindekiTumSonuclar = mevcutSonuclar.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>(); * var ayIcindekiTumSonuclar2 = new List<EczaneNobetSonucListe>(); * * foreach (var x in ayIcindekiTumSonuclar) * { * ayIcindekiTumSonuclar2.Add( * new EczaneNobetSonucListe * { * Ay = x.Ay, * Yil = x.Yil, * EczaneAdi = x.EczaneAdi, * EczaneId = x.EczaneId, * EczaneNobetGrupId = x.EczaneNobetGrupId, * Gun = x.Gun, * Tarih = x.Tarih, * HaftaninGunu = (int)x.Tarih.DayOfWeek + 1, * NobetGrupId = x.NobetGrupId, * NobetGrupAdi = x.NobetGrupAdi, * NobetUstGrupId = x.NobetUstGrupId, * NobetGorevTipAdi = x.NobetGorevTipAdi, * NobetGorevTipId = x.NobetGorevTipId, * TakvimId = x.TakvimId, * NobetGunKuralId = x.NobetGunKuralId * }); * } * * ayIcindeAyniGunNobetTutanEczaneler = _eczaneNobetOrtakService.GetCiftGrupluEczaneler(ayIcindekiTumSonuclar2, 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 }