public ActionResult AddComment(int site_expert, int site_id) { if (db.Experts_comments.Count(p => p.site_experts.audit_object_id == site_id && p.site_experts.id == site_expert) > 0) { return(RedirectToAction("Index")); } int type_organization = Convert.ToInt32(db.audit_object.Find(site_id).education__institution.First(p => p.audit_object_id == site_id).type_education_institution_id); int not_type_organization = (type_organization == 1) ? 1 : 2; List <Criteria> criterias = db.Criteria.Where(p => p.type_organization != not_type_organization).ToList(); List <Experts_comments> comments = new List <Experts_comments>(); int id = (db.Experts_comments.Count() > 0) ? (db.Experts_comments.Max(p => p.id) + 1) : 1; for (int i = 0; i < criterias.Count(); ++i) { Experts_comments comment = new Experts_comments(); comment.id = id++; comment.site_experts_id = site_expert; comment.answer = Convert.ToInt32(Request.Form["ask_" + criterias.ElementAt(i).id]); if (Request.Form["comment_" + criterias.ElementAt(i).id] != null) { comment.comment = Request.Form["comment_" + criterias.ElementAt(i).id]; } comment.criteria_id = criterias.ElementAt(i).id; comments.Add(comment); } db.Experts_comments.AddRange(comments); db.SaveChanges(); int monitoring = Convert.ToInt32(db.site_experts.Find(site_expert).monitoring_id); int all_site_experts = db.site_experts.Count(p => p.audit_object_id == site_id && p.monitoring_id == monitoring); int all_site_experts_with_comment = db.site_experts.Count(p => p.audit_object_id == site_id && p.monitoring_id == monitoring && p.Experts_comments.Count() > 0); if (all_site_experts == all_site_experts_with_comment) { List <Experts_comments> com = db.Experts_comments.Where(p => p.site_experts.audit_object_id == site_id && p.site_experts.monitoring_id == monitoring).ToList(); decimal sum = 0; foreach (Experts_comments c in com) { sum += (c.answer * c.Criteria.Coefficients.value * 100); } experts_ratinng e_r = new experts_ratinng(); //добавление экспертного рейтинга e_r.id = (db.experts_ratinng.Count() > 0) ? (db.experts_ratinng.Max(p => p.id) + 1) : 1; e_r.monitoring_id = monitoring; e_r.audit_object_id = site_id; e_r.sum = Convert.ToInt32(Math.Round(sum)); db.experts_ratinng.Add(e_r); db.SaveChanges(); technical_rating t = db.technical_rating.FirstOrDefault(p => p.monitoring_id == monitoring && p.audit_object_id == site_id); Rating rat = new Rating(); rat.id = (db.Rating.Count() > 0) ? (db.Rating.Max(p => p.id) + 1) : 1; rat.monitoring_id = monitoring; rat.audit_object_id = site_id; rat.sum = (t != null) ? Convert.ToInt32(Math.Round(sum + Convert.ToDecimal(t.sum))) : Convert.ToInt32(Math.Round(sum)); db.Rating.Add(rat); db.SaveChanges(); } return(RedirectToAction("Index")); }
public ActionResult _t_rating(int?edu1, int?m) { if (m == null) { m = db.technical_rating.OrderByDescending(p => p.monitoring.date_start).FirstOrDefault().monitoring_id; } int site = Convert.ToInt32(db.education__institution.Find(edu1).audit_object_id); technical_rating t = new technical_rating(); if (m != null) { t = db.technical_rating.FirstOrDefault(p => p.monitoring_id == m && p.audit_object_id == site); } return(PartialView(t)); }
// GET: Reviews/Details/5 public ActionResult Monitoring(int?id) { ViewBag.groups = db.Groups.ToList(); int site = Convert.ToInt32(Session["curator_site_id"]); technical_rating r = new technical_rating(); if (id == null && db.technical_rating.Where(p => p.audit_object_id == site).Count() > 0) { id = db.technical_rating.FirstOrDefault(p => p.audit_object_id == site).monitoring_id; } else if (db.technical_rating.Where(p => p.audit_object_id == site).Count() == 0) { id = 0; r = null; } if (id != 0) { r = db.technical_rating.FirstOrDefault(p => p.monitoring_id == id && p.audit_object_id == site); } ViewBag.monitoring = id; return(View(r)); }
public ActionResult ExportResults() { monitoring m = db.monitoring.OrderByDescending(p => p.date_end).FirstOrDefault(p => p.date_end < DateTime.Now); //last monitoring List <education__institution> edu = db.education__institution.Where(p => p.audit_object.technical_rating.Where(s => s.monitoring_id == m.id).Count() > 0 && p.audit_object.experts_ratinng.Where(s => s.monitoring_id == m.id).Count() > 0).ToList(); List <technical_rating> tech = db.technical_rating.Where(p => p.monitoring_id == m.id).ToList(); List <experts_ratinng> exp = db.experts_ratinng.Where(p => p.monitoring_id == m.id).ToList(); List <Groups> groups = db.Groups.ToList(); List <Criteria> criteria = db.Criteria.ToList(); List <Experts_comments> e_comment = db.Experts_comments.ToList(); ExcelPackage excel = new ExcelPackage(); var workSheet = excel.Workbook.Worksheets.Add("Результаты"); workSheet.Cells[1, 1].Value = "Учреждение"; workSheet.Cells[1, 2].Value = "Технический рейтинг"; workSheet.Cells[2, 2].Value = "Доступность сайта"; workSheet.Cells[2, 3].Value = "Код ответа HTTP"; workSheet.Cells[2, 4].Value = "Использование HTTPS"; workSheet.Cells[2, 5].Value = "Время отклика"; workSheet.Cells[2, 6].Value = "Время полной загрузки сайта"; workSheet.Cells[2, 7].Value = "Наличие подписей картинок"; workSheet.Cells[2, 8].Value = "Наличие заголовка"; workSheet.Cells[2, 9].Value = "Файл robot.txt"; workSheet.Cells[2, 10].Value = "Максимальный уровень вложенности"; workSheet.Cells[2, 11].Value = "Количество битых ссылок"; workSheet.Cells[1, 12].Value = "Экспертный рейтинг"; int rows = 4; int cols = 12; for (int i = 0; i < groups.Count(); ++i) { workSheet.Cells[2, cols].Value = groups.ElementAt(i).name; int group_id = groups.ElementAt(i).id; List <Criteria> cr = criteria.Where(p => p.group_id == group_id).ToList(); for (int j = 0; j < cr.Count(); ++j) { workSheet.Cells[3, cols++].Value = cr.ElementAt(j).short_name; } } for (int i = 0; i < edu.Count(); ++i) { workSheet.Cells[rows, 1].Value = edu.ElementAt(i).full_name; int audit_object_id = Convert.ToInt32(edu.ElementAt(i).audit_object_id); technical_rating t = tech.First(p => p.audit_object_id == audit_object_id); workSheet.Cells[rows, 2].Value = t.site_accessibility; workSheet.Cells[rows, 3].Value = ((t.status_code != null) && t.status_code.Contains("True")) ? "Доступен" : "Не доступен"; workSheet.Cells[rows, 4].Value = ((t.using_HTTPS != null) && t.using_HTTPS.Contains("True")) ? "Да" : "Нет"; workSheet.Cells[rows, 5].Value = t.response_time; workSheet.Cells[rows, 6].Value = t.full_load; workSheet.Cells[rows, 7].Value = ((t.img_title != null) && t.img_title.Contains("True")) ? "Да" : "Нет"; workSheet.Cells[rows, 8].Value = ((t.has_title != null) && t.has_title.Contains("True")) ? "Да" : "Нет"; workSheet.Cells[rows, 9].Value = ((t.robots_txt != null) && t.robots_txt.Contains("True")) ? "Да" : "Нет"; workSheet.Cells[rows, 10].Value = t.nesting_level; workSheet.Cells[rows, 11].Value = t.broken_links_count; experts_ratinng e = exp.First(p => p.audit_object_id == audit_object_id); for (int s = 0; s < groups.Count(); ++s) { int group_id = groups.ElementAt(s).id; List <Criteria> cr = criteria.Where(p => p.group_id == group_id).ToList(); for (int j = 0; j < cr.Count(); ++j) { int cr_id = cr.ElementAt(j).id; Experts_comments e1 = e_comment.FirstOrDefault(p => p.criteria_id == cr_id && p.site_experts.audit_object_id == audit_object_id); workSheet.Cells[rows, cols++].Value = (e1 != null) ? e1.answer.ToString() : ""; } } cols = 12; rows++; } var path = Path.Combine(Server.MapPath("~/Content/"), "results_monitoring.xlsx"); using (var memoryStream = new MemoryStream()) { Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment; filename=" + path); excel.SaveAs(memoryStream); memoryStream.WriteTo(Response.OutputStream); Response.Flush(); Response.End(); } FileInfo fi = new FileInfo(path); long sz = fi.Length; Response.ClearContent(); Response.ContentType = Path.GetExtension(path); Response.AddHeader("Content-Disposition", string.Format("attachment; filename = {0}", System.IO.Path.GetFileName(path))); Response.AddHeader("Content-Length", sz.ToString("F0")); Response.TransmitFile(path); Response.End(); System.IO.File.Delete(path); return(Redirect("/Reports/AllResults")); }
public ActionResult StartMonitoring() { //List<technical_rating> t = db.technical_rating.OrderByDescending(p => p.date).ToList(); //List<experts_ratinng> e = db.experts_ratinng.OrderByDescending(p => p.id).ToList(); //foreach (var item in e) //{ // int a = item.audit_object_id; // int t1 = 0, e1 = item.sum; // if (t.FirstOrDefault(p => p.audit_object_id == a) != null) // { // t1 = Convert.ToInt32(t.FirstOrDefault(p => p.audit_object_id == a).sum); // } // Rating r = new Rating(); // r.id = (db.Rating.Count() > 0) ? (db.Rating.Max(p => p.id) + 1) : 1; // r.audit_object_id = a; // r.monitoring_id = 1; // r.sum = e1 + t1; // db.Rating.Add(r); // db.SaveChanges(); //} monitoring monitoring = new monitoring(); //начался новый Мониторинг monitoring.id = (db.monitoring.Count() > 0) ? (db.monitoring.Max(p => p.id) + 1) : 1; monitoring.date_start = DateTime.Now; System.TimeSpan duration = new System.TimeSpan(30, 0, 0, 0); monitoring.date_end = monitoring.date_start.Add(duration); monitoring.number_experts_one_site = 0; db.monitoring.Add(monitoring); List <experts> user_list = db.experts.Where(p => p.User.state_id == 1).ToList(); //список экспертов List <education__institution> edu = db.education__institution.Where(p => p.state_id == 1 && p.audit_object != null).ToList(); List <audit_object> a = db.audit_object.Where(p => !p.adress_site.Equals(" ")).ToList(); //список УО для проверки List <site_experts> site_experts = new List <site_experts>(); //список для записи новых проверок List <technical_rating> tech = new List <technical_rating>(); int t_rating_count = (db.technical_rating.Count() > 0) ? (db.technical_rating.Max(p => p.id) + 1) : 1; string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"files/"); List <audit_object> errors_site = new List <audit_object>(); for (int i = 0; i < a.Count(); ++i)//запись технического рейтинга в бд { if (!a[i].adress_site.Contains("\\") && !a[i].adress_site.Contains("/") && !a[i].adress_site.Contains("@")) { try { string[] dirs = Directory.GetFiles(path, a[i].adress_site.Trim() + ".json"); if (dirs.Count() != 0) { technical_rating t = new technical_rating(); t.id = t_rating_count++; t.monitoring_id = monitoring.id; t.audit_object_id = Convert.ToInt32(a[i].id); t.date = DateTime.Now; using (StreamReader r = new StreamReader(dirs[0])) { string json = r.ReadToEnd(); dynamic array = JsonConvert.DeserializeObject(json); t.site_accessibility = array["audits"]["time-to-first-byte"]["rawValue"]; t.status_code = array["audits"]["http-status-code"]["rawValue"]; t.using_HTTPS = array["audits"]["is-on-https"]["rawValue"]; t.response_time = array["audits"]["estimated-input-latency"]["rawValue"]; t.img_title = array["audits"]["image-alt"]["rawValue"]; t.has_title = array["audits"]["bypass"]["rawValue"]; t.full_load = array["audits"]["interactive"]["rawValue"]; t.robots_txt = array["audits"]["robots-txt"]["rawValue"]; string[] dirs2 = Directory.GetFiles(path + "/majento", a[i].adress_site + ".json"); if (dirs2.Count() != 0) { StreamReader reader; using (reader = new StreamReader(dirs2[0])) { string js = reader.ReadToEnd(); dynamic arr = System.Web.Helpers.Json.Decode(js); t.nesting_level = arr[0]["maxLevel"]; t.broken_links_count = arr[0]["numberOfBrokenLinks"]; t.broken_links_text = string.Join(", ", arr[0]["brokenLinks"]); } } int sum = 0; if (t.status_code.Contains("True")) { sum += 600; } if (t.site_accessibility < 50) { sum += 400; } else if (t.site_accessibility < 60) { sum = sum + (400 - (Convert.ToInt32(t.site_accessibility) - 49) * 40); } if (t.robots_txt.Contains("True")) { sum += 50; } if (t.broken_links_count == 0) { sum += 200; } else if (t.broken_links_count > 0 && t.broken_links_count < 20) { sum = sum + (200 - (Convert.ToInt32(t.broken_links_count) * 10)); } t.sum = sum; } tech.Add(t); } } catch (Exception e) { errors_site.Add(a[i]); } } else { errors_site.Add(a[i]); } } db.technical_rating.AddRange(tech); db.SaveChanges(); List <site_experts> experts = new List <site_experts>(); int expert_id = (db.site_experts.Count() > 0) ? (db.site_experts.Max(p => p.id) + 1) : 1; foreach (var u in user_list) { string UNP = u.education__institution.UNP; List <education__institution> p_unp = edu.Where(p => p.UNP_superior_management.Contains(UNP)).ToList(); foreach (var e in p_unp) { site_experts site = new site_experts(); site.id = expert_id++; site.expert_id = u.id; site.monitoring_id = monitoring.id; site.date = DateTime.Now; site.audit_object_id = Convert.ToInt32(e.audit_object_id); experts.Add(site); } } db.site_experts.AddRange(experts); db.SaveChanges(); List <User> all_user = db.User.Where(p => p.state_id == 1).ToList(); List <events> all_events = new List <events>(); int event_id = (db.events.Count() > 0) ? (db.events.Max(p => p.id) + 1) : 0; foreach (User item in all_user) { events e = new events(); e.state_id = 1; e.id = event_id; event_id++; e.text = "Мониторинг сайтов государственных органов и организаций начался."; e.date_created = DateTime.Now; e.recipient_id = item.id; all_events.Add(e); } db.events.AddRange(all_events); db.SaveChanges(); return(Redirect("/Experts/SiteExperts")); }