示例#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
        }
示例#2
0
        private AlanyaDataModelEski EczaneNobetDataModel(EczaneNobetDataModelParametre eczaneNobetDataModelParametre)
        {
            #region parametreler
            var nobetUstGrupId   = eczaneNobetDataModelParametre.NobetUstGrupId;
            var yilBaslangic     = eczaneNobetDataModelParametre.YilBaslangic;
            var yilBitis         = eczaneNobetDataModelParametre.YilBitis;
            var ayBaslangic      = eczaneNobetDataModelParametre.AyBaslangic;
            var ayBitis          = eczaneNobetDataModelParametre.AyBitis;
            var nobetGrupIdListe = eczaneNobetDataModelParametre.NobetGrupId.ToList();
            var nobetGorevTipId  = eczaneNobetDataModelParametre.NobetGorevTipId;
            #endregion

            var baslangicTarihi = new DateTime(yilBitis, ayBitis, 1);
            var bitisTarihi     = baslangicTarihi.AddMonths(1);
            var nobetGruplar    = _nobetGrupService.GetList(nobetGrupIdListe).OrderBy(s => s.Id).ToList();
            var eczaneNobetMazeretNobettenDusenler = _eczaneNobetMazeretService.GetEczaneNobetMazeretSayilari(baslangicTarihi, bitisTarihi, nobetGrupIdListe);
            var eczaneNobetSonuclarAylik           = _eczaneNobetSonucService.GetSonuclar(baslangicTarihi, bitisTarihi, nobetUstGrupId);

            var eczaneGrupEdges = _eczaneGrupService.GetEdges(nobetUstGrupId)
                                  .Where(e => (nobetGrupIdListe.Contains(e.FromNobetGrupId) || nobetGrupIdListe.Contains(e.ToNobetGrupId)))
                                  .Where(w => (eczaneNobetSonuclarAylik.Select(s => s.EczaneId).Distinct().Contains(w.From) || eczaneNobetSonuclarAylik.Select(s => s.EczaneId).Distinct().Contains(w.To)))
                                  .ToList();

            //sonuclarda ilişkili eczaneler
            var eczaneGruplar = _eczaneGrupService.GetDetaylar(nobetUstGrupId)
                                .Where(x => x.EczaneGrupTanimBitisTarihi == null
                                       //&& x.EczaneGrupTanimTipId == 2 //coğrafi yakınlık hariç
                                       && nobetGrupIdListe.Contains(x.NobetGrupId) &&
                                       (eczaneGrupEdges.Select(s => s.From).Distinct().Contains(x.EczaneId) || eczaneGrupEdges.Select(s => s.To).Distinct().Contains(x.EczaneId))
                                       ).ToList();

            //fazladan gelen tanımlar var. burayı iyileştirmekte fayda var
            var eczaneGrupTanimlar = _eczaneGrupTanimService.GetAktifTanimList(eczaneGruplar.Select(x => x.EczaneGrupTanimId).ToList());
            var eczaneGruplar2     = _eczaneGrupService.GetDetaylarByEczaneGrupTanimId(eczaneGrupTanimlar.Select(s => s.Id).ToList());

            var eczaneGrupNobetSonuclar = eczaneNobetSonuclarAylik
                                          .Where(w => eczaneGruplar2.Select(s => s.EczaneId).Contains(w.EczaneId)).ToList();

            var esGrupluEczaneler = _eczaneNobetGrupService.GetAktifEczaneGrupList(nobetGrupIdListe)
                                    .Where(x => !eczaneNobetMazeretNobettenDusenler.Select(s => s.EczaneId).Contains(x.EczaneId))
                                    .Select(x => x.EczaneId).Distinct().ToList();

            var eczaneNobetGruplar = _eczaneNobetGrupService.GetAktifEczaneGrupList(nobetGruplar.Select(w => w.Id).ToList())
                                     .Where(s => !eczaneNobetMazeretNobettenDusenler.Select(f => f.EczaneId).Contains(s.EczaneId)).ToList();

            #region aynı gün nöbet tutan eczaneler

            //nöbet yazılacak tarih aralığı(örn. Ocak ayının tüm günleri)
            //int cozumOncekiAyi = GetOncekiAy(periyot: 3, cozumAyi: ayBitis);
            //var cozumOncekiIkiAyi = GetOncekiAy(periyot: 2, cozumAyi: ayBitis);
            //var aktifSonuclar = _eczaneNobetSonucAktifService.GetSonuclarAylik(yilBitis, ayBitis, nobetUstGrupId);
            //var ayniAydakiDigerGruplarinSonuclari = _eczaneNobetSonucService.GetSonuclarAylik(yilBitis, ayBitis, nobetUstGrupId);
            //var ayIcindekiTumSonuclar = aktifSonuclar.Union(ayniAydakiDigerGruplarinSonuclari).ToList();
            //var ayIcindeCozulenNobetGruplar = ayIcindekiTumSonuclar.Select(s => s.NobetGrupId).Distinct().ToList();

            #region son iki ay

            //var sonIkiAyBakilacakGruplar = new List<int>();

            //foreach (var item in ayIcindeCozulenNobetGruplar)
            //{
            //    sonIkiAyBakilacakGruplar.Add(item);
            //}

            ////şimdi çözülecek grup
            //foreach (var item in nobetGrupIdListe)
            //{
            //    sonIkiAyBakilacakGruplar.Add(item);
            //}

            //var sonIkiAyAyniGunNobetTutanEczaneler = new List<EczaneCiftGrup>();
            //var gruplar = sonIkiAyBakilacakGruplar.Distinct().ToList();

            //if (_nobetUstGrupKisitService.GetKisitPasifMi("sonIkiAydakiGrup", nobetUstGrupId) && sonIkiAyBakilacakGruplar.Count() > 1 && ayBitis > 1)
            //{
            //    var sonIkiAydakiSonuclar = _eczaneNobetSonucService.GetSonuclar(yilBitis, cozumOncekiAyi, ayBitis - 1, nobetUstGrupId)
            //     .Where(x => gruplar.Contains(x.NobetGrupId)).ToList();

            //    sonIkiAyAyniGunNobetTutanEczaneler = _eczaneNobetOrtakService.GetCiftGrupluEczaneler(sonIkiAydakiSonuclar, 1);
            //}
            #endregion

            #region yillik kümülatif

            //var yilIcindeAyniGunNobetTutanEczaneler = new List<EczaneCiftGrup>();

            //if (_nobetUstGrupKisitService.GetKisitPasifMi("yildaEncokUcKezGrup", nobetUstGrupId) && sonIkiAyBakilacakGruplar.Count() > 1 && ayBitis > 2)
            //{
            //    var yillikKumulatifSonuclar = _eczaneNobetSonucService.GetSonuclarYillikKumulatif(yilBitis, ayBitis - 1, nobetUstGrupId)
            //        .Where(x => gruplar.Contains(x.NobetGrupId)).ToList();

            //    yilIcindeAyniGunNobetTutanEczaneler = _eczaneNobetOrtakService.GetCiftGrupluEczaneler(yillikKumulatifSonuclar, 3);
            //}
            #endregion

            //bu alan EczaneNobetCozAktifiGuncelle içinde kullanılıyor.
            var ayIcindeAyniGunNobetTutanEczaneler = new List <EczaneCiftGrup>();

            #endregion

            var alanyaDataModel = new AlanyaDataModelEski()
            {
                Yil                     = yilBitis,
                Ay                      = ayBitis,
                LowerBound              = 0,
                UpperBound              = 1,
                NobetUstGrupId          = nobetUstGrupId,
                NobetGruplar            = nobetGruplar,
                EczaneNobetTarihAralik  = _takvimService.GetEczaneNobetTarihAralik(baslangicTarihi, bitisTarihi, nobetGorevTipId, nobetGrupIdListe), //karar değişkeni
                EczaneKumulatifHedefler = _takvimService.GetEczaneKumulatifHedefler(yilBaslangic, yilBitis, ayBaslangic, ayBitis, nobetGrupIdListe, nobetGorevTipId),
                EczaneNobetMazeretListe = _eczaneNobetMazeretService.GetDetaylar(yilBitis, ayBitis, esGrupluEczaneler),
                EczaneGrupTanimlar      = eczaneGrupTanimlar,
                TarihAraligi            = _takvimService.GetTakvimNobetGruplar(baslangicTarihi, bitisTarihi, nobetGrupIdListe, nobetGorevTipId),
                EczaneGruplar           = eczaneGruplar2,
                EczaneNobetIstekListe   = _eczaneNobetIstekService.GetDetaylarByNobetGrupIdList(yilBitis, ayBitis, nobetGrupIdListe),
                NobetGrupGunKurallar    = _nobetGrupGunKuralService.GetAktifList(nobetGrupIdListe),
                NobetGrupKurallar       = _nobetGrupKuralService.GetDetaylar(nobetGrupIdListe),
                NobetGrupGorevTipler    = _nobetGrupGorevTipService.GetList(nobetGorevTipId, nobetGrupIdListe),
                NobetGrupTalepler       = _nobetGrupTalepService.GetDetaylar(nobetGrupIdListe, baslangicTarihi, bitisTarihi),
                EczaneNobetGruplar      = eczaneNobetGruplar,
                NobetUstGrupKisitlar    = _nobetUstGrupKisitService.GetDetaylar(nobetUstGrupId),
                EczaneGrupNobetSonuclar = eczaneGrupNobetSonuclar,
                EczaneNobetSonuclar     = _eczaneNobetSonucService.GetSonuclar(nobetUstGrupId),

                AyIcindeAyniGunNobetTutanEczaneler  = ayIcindeAyniGunNobetTutanEczaneler,
                YilIcindeAyniGunNobetTutanEczaneler = new List <EczaneCiftGrup>(),        //yilIcindeAyniGunNobetTutanEczaneler,
                SonIkiAyAyniGunNobetTutanEczaneler  = new List <EczaneCiftGrup>(),        //sonIkiAyAyniGunNobetTutanEczaneler,
                EczaneNobetSonuclarSonIkiAy         = new List <EczaneNobetSonucListe>(), //_eczaneNobetSonucService.GetSonuclar(yilBitis, cozumOncekiIkiAyi, ayBitis, nobetUstGrupId),
                EczaneNobetSonuclarOncekiAylar      = new List <EczaneNobetSonucListe>()  //_eczaneNobetSonucService.GetSonuclar(yilBitis, ayBaslangic, ayBitis, nobetUstGrupId)
            };
            return(alanyaDataModel);
        }