예제 #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
        }
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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
        }