public ActionResult GorselSonuclar() { var user = _userService.GetByUserName(User.Identity.Name); var nobetUstGrupId = _nobetUstGrupService.GetListByUser(user).Select(r => r.Id).FirstOrDefault(); var yetkiliEczaneler = _eczaneService.GetListByUser(user).Select(n => n.Id).ToList(); var demoSonuclar = _eczaneNobetSonucDemoService.GetDetaylar(nobetUstGrupId); var nobetGunKurallar = _nobetGunKuralService.GetList(); var eczaneler = _eczaneNobetGrupService.GetDetaylarByEczaneIdList(yetkiliEczaneler) //.Where(w => yetkiliEczaneler.Contains(w.EczaneId)) .Select(s => new { s.EczaneId, EczaneGrupAdi = $"{s.EczaneAdi}, {s.NobetGrupId}" }) .Distinct().OrderBy(s => s.EczaneGrupAdi).ToList(); var eczaneGruplar = _eczaneGrupService.GetDetaylar() .Where(w => yetkiliEczaneler.Contains(w.EczaneId)).ToList(); var eczaneGrupNodes = _eczaneGrupService.GetNodes() .Where(s => eczaneGruplar.Select(w => w.EczaneId).Contains(s.Id)).ToList(); var eczaneGrupEdges = _eczaneGrupService.GetEdges() .Where(s => nobetUstGrupId == s.NobetUstGrupId).ToList(); var yillar = demoSonuclar.Select(s => s.Tarih.Year).Distinct().ToList(); var versiyonlar = demoSonuclar.Select(s => s.NobetSonucDemoTipId).Distinct().ToList(); var aylar = _takvimService.GetAylar().ToList(); var Frekanslar = new List <int> { 1, 2, 3, 4, 5 }; var demoTipler = _nobetSonucDemoTipService.GetList() .Where(w => versiyonlar.Contains(w.Id)) .Select(s => new MyDrop { Id = s.Id, Value = s.Adi }); ViewBag.eczaneId = new SelectList(eczaneler, "EczaneId", "EczaneGrupAdi"); //ViewBag.yilBaslangic = new SelectList(yillar, "Yil"); ViewBag.yilBitis = new SelectList(yillar, "Yil"); //ViewBag.ayBaslangic = new SelectList(aylar, "Id", "Value"); ViewBag.Aylar = new SelectList(aylar, "Id", "Value"); var ay = 1; var frekans = 1; var versiyon = demoTipler.Select(s => s.Id).FirstOrDefault(); ViewBag.ayBitis = ay; ViewBag.frekansDefault = frekans; ViewBag.versiyonDefault = versiyon; ViewBag.Frekans = new SelectList(Frekanslar, null, null, frekans); //ViewBag.Versiyon = new SelectList(versiyonlar, null, null, versiyon); ViewBag.Versiyonlar = new SelectList(demoTipler, "Id", "Value", versiyon); int ayniGuneDenkGelenNobetSayisi = frekans; //var eczaneNobetSonucNodes = _eczaneNobetSonucDemoService.GetEczaneNobetSonucDemoNodes(2018, ay, versiyon, yetkiliEczaneler); //var eczaneNobetSonucEdges = _eczaneNobetSonucDemoService.GetEczaneNobetSonucDemoEdges(2018, ay, ayniGuneDenkGelenNobetSayisi, versiyon, nobetUstGrupId); var model = new EczaneNobetGorselSonucViewModel() { EczaneNobetSonucNodes = new List <EczaneNobetSonucNode>(), //eczaneNobetSonucNodes, EczaneNobetSonucEdges = new List <EczaneNobetSonucEdge>(), //eczaneNobetSonucEdges, EczaneGrupNodes = eczaneGrupNodes, EczaneGrupEdges = eczaneGrupEdges }; return(View(model)); }
public EczaneNobetSonucModel ModelCoz(EczaneNobetModelCoz eczaneNobetModelCoz) { //var nobetGruplarTumu = _nobetGrupService.GetListByNobetUstGrupId(eczaneNobetModelCoz.NobetUstGrupId); var nobetGruplar = eczaneNobetModelCoz.NobetGrupId.ToList(); var nobetGruplarSirali = new List <NobetGruplarCozumSirali>(); var sonuclar = new EczaneNobetSonucModel(); var indis = 1; foreach (var nobetGrupId in nobetGruplar) { nobetGruplarSirali.Add(new NobetGruplarCozumSirali { NobetGrupId = nobetGrupId, SiraId = indis }); indis++; } if (nobetGruplar.Count > 0) { #region başka gruplarla ilişkisi olan gruplar var eczaneGruplar = _eczaneGrupService.GetDetaylarAktifGruplar(eczaneNobetModelCoz.NobetUstGrupId) .Where(d => nobetGruplar.Contains(d.NobetGrupId)).ToList(); //Birbiri ile ilişkili grupların gruplanması var nobetGruplarBagDurumu = _eczaneGrupService.EsGrupluEczanelerinGruplariniBelirleTumu(eczaneGruplar, nobetGruplar); var tumNobetGruplar = from g in nobetGruplarSirali let e = nobetGruplarBagDurumu.SingleOrDefault(x => x.NobetGrupId == g.NobetGrupId) ?? new NobetBagGrup() orderby e.Id, g.SiraId select new NobetGrupBagGrup { BagId = e.Id, NobetGrupId = g.NobetGrupId }; #endregion var nobetGrupBaglar = tumNobetGruplar.Select(s => s.BagId).Distinct().ToList(); #region Karar kuralları var model = new EczaneNobetDataModelParametre { AyBitis = eczaneNobetModelCoz.AyBitis, NobetGorevTipId = eczaneNobetModelCoz.NobetGorevTipId, NobetGrupGorevTipler = eczaneNobetModelCoz.NobetGrupGorevTipler, NobetGrupId = eczaneNobetModelCoz.NobetGrupId, NobetUstGrupId = eczaneNobetModelCoz.NobetUstGrupId, NobetUstGrupBaslangicTarihi = eczaneNobetModelCoz.NobetUstGrupBaslangicTarihi, BuAyVeSonrasi = eczaneNobetModelCoz.BuAyVeSonrasi, BaslangicTarihi = eczaneNobetModelCoz.BaslangicTarihi, BitisTarihi = eczaneNobetModelCoz.BitisTarihi, TimeLimit = eczaneNobetModelCoz.TimeLimit, CalismaSayisi = eczaneNobetModelCoz.CalismaSayisi }; var aylar = _takvimService.GetAylar() .Where(w => w.Id >= model.AyBitis) .OrderBy(o => o.Id).ToList(); var ayIndis = 0; if (eczaneNobetModelCoz.BuAyVeSonrasi && eczaneNobetModelCoz.CozumTercih == 0 && eczaneNobetModelCoz.SonrakiAylarRasgele) {//seçilen ay ve sonrası, gruplar öncelikli - sonraki aylarda gruplar rasgele sıralı foreach (var ay in aylar) { if (eczaneNobetModelCoz.AyBitis == ay.Id) {//ilk ay arayüzdeki sıra foreach (var item in nobetGrupBaglar) { var nobetGrupIdListe = tumNobetGruplar .Where(x => x.BagId == item) .Select(s => s.NobetGrupId); foreach (var nobetGrupId in nobetGrupIdListe) { var tarihBas = model.BaslangicTarihi; var tarihBit = model.BitisTarihi; var aydakiGunSayisi = DateTime.DaysInMonth(tarihBit.Year, ay.Id); var baslangicGunu = 1; if (ayIndis == 1) { baslangicGunu = tarihBas.Day; } model.BaslangicTarihi = new DateTime(tarihBas.Year, ay.Id, baslangicGunu); model.BitisTarihi = new DateTime(tarihBit.Year, ay.Id, aydakiGunSayisi); model.NobetGrupId = new int[] { nobetGrupId }; var data = EczaneNobetDataModel(model); //return EczaneNobetCozSonuclaraEkle(data); var sonuc = EczaneNobetCozSonuclaraEkle(data); sonuclar.ObjectiveValue += sonuc.ObjectiveValue; sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi; sonuclar.KisitSayisi += sonuc.KisitSayisi; sonuclar.CozumSuresi += sonuc.CozumSuresi; sonuclar.CalismaSayisi += sonuc.CalismaSayisi; sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi; } } } else { foreach (var item in nobetGrupBaglar) { var r = new Random(); var nobetGrupIdListe = tumNobetGruplar .Where(x => x.BagId == item) .Select(s => s.NobetGrupId) .OrderBy(x => r.NextDouble()); foreach (var nobetGrupId in nobetGrupIdListe) { var tarihBas = model.BaslangicTarihi; var tarihBit = model.BitisTarihi; var aydakiGunSayisi = DateTime.DaysInMonth(tarihBit.Year, ay.Id); var baslangicGunu = 1; if (ayIndis == 1) { baslangicGunu = tarihBas.Day; } model.BaslangicTarihi = new DateTime(tarihBas.Year, ay.Id, baslangicGunu); model.BitisTarihi = new DateTime(tarihBit.Year, ay.Id, aydakiGunSayisi); model.NobetGrupId = new int[] { nobetGrupId }; var data = EczaneNobetDataModel(model); var sonuc = EczaneNobetCozSonuclaraEkle(data); sonuclar.ObjectiveValue += sonuc.ObjectiveValue; sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi; sonuclar.KisitSayisi += sonuc.KisitSayisi; sonuclar.CozumSuresi += sonuc.CozumSuresi; sonuclar.CalismaSayisi += sonuc.CalismaSayisi; sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi; } } } } return(sonuclar); } else if (eczaneNobetModelCoz.BuAyVeSonrasi && eczaneNobetModelCoz.CozumTercih == 0) {//seçilen ay ve sonrası, gruplar öncelikli foreach (var ay in aylar) { ayIndis++; if (tumNobetGruplar.Count() == 1) { model.AyBitis = ay.Id; var data = EczaneNobetDataModel(model); return(EczaneNobetCozSonuclaraEkle(data)); } else { foreach (var item in nobetGrupBaglar) { var nobetGrupIdListe = tumNobetGruplar .Where(x => x.BagId == item) .Select(s => s.NobetGrupId); foreach (var nobetGrupId in nobetGrupIdListe) { var tarihBas = model.BaslangicTarihi; var tarihBit = model.BitisTarihi; var aydakiGunSayisi = DateTime.DaysInMonth(tarihBit.Year, ay.Id); var baslangicGunu = 1; if (ayIndis == 1) { baslangicGunu = tarihBas.Day; } model.BaslangicTarihi = new DateTime(tarihBas.Year, ay.Id, baslangicGunu); model.BitisTarihi = new DateTime(tarihBit.Year, ay.Id, aydakiGunSayisi); model.NobetGrupId = new int[] { nobetGrupId }; var data = EczaneNobetDataModel(model); var sonuc = EczaneNobetCozSonuclaraEkle(data); sonuclar.ObjectiveValue += sonuc.ObjectiveValue; sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi; sonuclar.KisitSayisi += sonuc.KisitSayisi; sonuclar.CozumSuresi += sonuc.CozumSuresi; sonuclar.CalismaSayisi += sonuc.CalismaSayisi; sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi; } } } } return(sonuclar); } else if (eczaneNobetModelCoz.BuAyVeSonrasi && eczaneNobetModelCoz.CozumTercih == 1) {//seçilen ay ve sonrası, gruplar önceliksiz foreach (var ay in aylar) { ayIndis++; foreach (var item in nobetGrupBaglar) { var nobetGrupIdListe = tumNobetGruplar .Where(x => x.BagId == item) .Select(s => s.NobetGrupId) .ToArray(); var tarihBas = model.BaslangicTarihi; var tarihBit = model.BitisTarihi; var aydakiGunSayisi = DateTime.DaysInMonth(tarihBit.Year, ay.Id); var baslangicGunu = 1; if (ayIndis == 1) { baslangicGunu = tarihBas.Day; } model.BaslangicTarihi = new DateTime(tarihBas.Year, ay.Id, baslangicGunu); model.BitisTarihi = new DateTime(tarihBit.Year, ay.Id, aydakiGunSayisi); model.NobetGrupId = nobetGrupIdListe; var data = EczaneNobetDataModel(model); var sonuc = EczaneNobetCozSonuclaraEkle(data); sonuclar.ObjectiveValue += sonuc.ObjectiveValue; sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi; sonuclar.KisitSayisi += sonuc.KisitSayisi; sonuclar.CozumSuresi += sonuc.CozumSuresi; sonuclar.CalismaSayisi += sonuc.CalismaSayisi; sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi; } } return(sonuclar); } else if (eczaneNobetModelCoz.CozumTercih == 0) {//ay, gruplar öncelikli if (tumNobetGruplar.Count() == 1) { var data = EczaneNobetDataModel(model); return(EczaneNobetCozAktifiGuncelle(data)); } else { foreach (var item in nobetGrupBaglar) { var nobetGrupIdListe = tumNobetGruplar .Where(x => x.BagId == item) .Select(s => s.NobetGrupId) .ToArray(); foreach (var nobetGrupId in nobetGrupIdListe) { model.NobetGrupId = new int[] { nobetGrupId }; var data = EczaneNobetDataModel(model); var sonuc = EczaneNobetCozSonuclaraEkle(data); sonuclar.ObjectiveValue += sonuc.ObjectiveValue; sonuclar.KararDegikeniSayisi += sonuc.KararDegikeniSayisi; sonuclar.KisitSayisi += sonuc.KisitSayisi; sonuclar.CozumSuresi += sonuc.CozumSuresi; sonuclar.CalismaSayisi += sonuc.CalismaSayisi; sonuclar.IterasyonSayisi += sonuc.IterasyonSayisi; } } return(sonuclar); } } else if (eczaneNobetModelCoz.CozumTercih == 1) {//ay, gruplar önceliksiz foreach (var item in nobetGrupBaglar) { var nobetGrupIdListe = tumNobetGruplar .Where(x => x.BagId == item) .Select(s => s.NobetGrupId) .ToArray(); model.NobetGrupId = nobetGrupIdListe; var data = EczaneNobetDataModel(model); //return EczaneNobetCozAktifiGuncelle(data); sonuclar = EczaneNobetCozAktifiGuncelle(data); } return(sonuclar); } else {//diğer throw new Exception("Nöbet yazdırma kriter seçimi hatalıdır. Lütfen kontrol ediniz."); } #endregion } return(sonuclar); }
public void ModelCoz(EczaneNobetModelCoz eczaneNobetModelCoz) { var nobetGruplar = _nobetGrupService.GetListByNobetUstGrupId(eczaneNobetModelCoz.NobetUstGrupId); if (nobetGruplar.Count > 0) { #region başka gruplarla ilişkisi olan gruplar var eczaneGrupDetaylar = _eczaneGrupService.GetDetaylar() .Where(d => d.EczaneGrupTanimBitisTarihi == null && nobetGruplar.Select(s => s.Id).Contains(d.NobetGrupId)).ToList(); //başka gruplarla ilişkisi olan gruplar var esGruplar = eczaneGrupDetaylar.Select(x => x.NobetGrupId).Distinct().OrderBy(x => x).ToList(); //Birbiri ile ilişkili grupların gruplanması var esliNobetGruplar = _eczaneGrupService.EsGrupluEczanelerinGruplariniBelirle(eczaneGrupDetaylar, esGruplar) .Where(w => eczaneNobetModelCoz.NobetGrupId.Contains(w.NobetGrupId)).ToList(); //.Where(w => w.NobetGrupId == eczaneNobetModelCoz.NobetGrupId || eczaneNobetModelCoz.NobetGrupId.Contains(0)).ToList(); #endregion #region başka gruplarla ilişkisi olmayan gruplar var tekEczaneNobetGruplar = _eczaneNobetGrupService.GetDetaylar(eczaneNobetModelCoz.NobetUstGrupId) .Where(x => !esGruplar.Contains(x.NobetGrupId)).ToList(); var tekliNobetGruplar = tekEczaneNobetGruplar .Where(d => nobetGruplar.Select(s => s.Id).Contains(d.NobetGrupId)) .Select(c => c.NobetGrupId).Distinct().ToList(); #endregion #region tüm nöbet gruplar var tumNobetGruplar = new List <NobetBagGrup>(); foreach (var esliNobetGrup in esliNobetGruplar.Distinct()) { tumNobetGruplar.Add(new NobetBagGrup { Id = esliNobetGrup.Id, NobetGrupId = esliNobetGrup.NobetGrupId }); } var indis = tumNobetGruplar.Select(s => s.Id).LastOrDefault(); foreach (var tekliNobetGrup in tekliNobetGruplar.Distinct()) { indis++; tumNobetGruplar.Add(new NobetBagGrup { Id = indis, NobetGrupId = tekliNobetGrup }); } var nobetGrupTanimlar = tumNobetGruplar.Select(s => s.Id).Distinct().ToList(); #endregion #region Karar kuralları var model = new EczaneNobetDataModelParametre { //AyBaslangic = eczaneNobetModelCoz.AyBaslangic, AyBitis = eczaneNobetModelCoz.AyBitis, NobetGorevTipId = eczaneNobetModelCoz.NobetGorevTipId, NobetGrupId = eczaneNobetModelCoz.NobetGrupId, NobetUstGrupId = eczaneNobetModelCoz.NobetUstGrupId, //YilBaslangic = eczaneNobetModelCoz.YilBaslangic, //YilBitis = eczaneNobetModelCoz.YilBitis }; if (eczaneNobetModelCoz.NobetGrupId.Contains(0) && eczaneNobetModelCoz.AyBitis == 0) {//ay ve gruplar --tümü-- foreach (var ay in _takvimService.GetAylar()) { foreach (var item in nobetGrupTanimlar) { var r = new Random(); var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => r.NextDouble()).ToList(); foreach (var item2 in liste) { var liste2 = new int[] { item2 }; model.AyBitis = ay.Id; model.NobetGrupId = liste2; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } } else if (eczaneNobetModelCoz.NobetGrupId.Contains(0)) {//ay seçili, gruplar --tümü-- if (eczaneNobetModelCoz.BuAyVeSonrasi) { var aylar = _takvimService.GetAylar() .Where(w => w.Id >= eczaneNobetModelCoz.AyBitis).ToList(); foreach (var ay in aylar) { foreach (var item in nobetGrupTanimlar) { var r = new Random(); var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => r.NextDouble()).ToList(); foreach (var item2 in liste) { var liste2 = new int[] { item2 }; model.AyBitis = ay.Id; model.NobetGrupId = liste2; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } } else { foreach (var item in nobetGrupTanimlar) { var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => x).ToList(); foreach (var item2 in liste) { var liste2 = new int[] { item2 }; model.NobetGrupId = liste2; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } } else if (eczaneNobetModelCoz.AyBitis == 0) {//grup seçili, aylar --tümü-- foreach (var ay in _takvimService.GetAylar()) { foreach (var item in tumNobetGruplar .Where(x => eczaneNobetModelCoz.NobetGrupId.Contains(x.NobetGrupId)) //.Where(x => x.NobetGrupId == eczaneNobetModelCoz.NobetGrupId) .Select(s => s.Id).Distinct().ToList()) { var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => x).ToList(); foreach (var item2 in liste) { var liste2 = new int[] { item2 }; model.AyBitis = ay.Id; model.NobetGrupId = liste2; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } } else {//seçili grup ve ay if (eczaneNobetModelCoz.BuAyVeSonrasi) { var aylar = _takvimService.GetAylar() .Where(w => w.Id >= eczaneNobetModelCoz.AyBitis).ToList(); foreach (var ay in aylar) { foreach (var item in tumNobetGruplar .Where(x => eczaneNobetModelCoz.NobetGrupId.Contains(x.NobetGrupId)) //.Where(x => x.NobetGrupId == eczaneNobetModelCoz.NobetGrupId) .Select(s => s.Id).Distinct().ToList()) { var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => x).ToArray(); model.AyBitis = ay.Id; model.NobetGrupId = liste; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); Kesinlestir(model.NobetUstGrupId); } } } else { foreach (var item in tumNobetGruplar .Where(x => eczaneNobetModelCoz.NobetGrupId.Contains(x.NobetGrupId)) //.Where(x => x.NobetGrupId == eczaneNobetModelCoz.NobetGrupId) .Select(s => s.Id).Distinct().ToList()) { var liste = tumNobetGruplar .Where(x => x.Id == item) .Select(s => s.NobetGrupId) .OrderByDescending(x => x).ToArray(); model.NobetGrupId = liste; var data = EczaneNobetDataModel(model); EczaneNobetCozAktifiGuncelle(data); } } #endregion } } }