Esempio n. 1
0
        /// <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
        }