Example #1
0
        //Вывод рейтингов сайтов учреждений на главной странице в зависимости от типов, к которым данные учреждения относятся
        public ActionResult _rating(int type)
        {
            monitoring    m      = db.monitoring.OrderByDescending(p => p.date_end).FirstOrDefault(p => p.date_end < DateTime.Now);
            List <Rating> rating = new List <Rating>();

            if (m != null)
            {
                rating = db.Rating.Where(p => p.monitoring_id == m.id).ToList();
                if (type == 1)
                {
                    rating = rating.Where(p => (p.audit_object.education__institution.First().type_edu_id >= 1 && p.audit_object.education__institution.First().type_edu_id <= 4) || p.audit_object.education__institution.First().type_edu_id == 6 || p.audit_object.education__institution.First().type_edu_id == 7 || (p.audit_object.education__institution.First().type_edu_id >= 9 && p.audit_object.education__institution.First().type_edu_id <= 12)).ToList();
                }
                else if (type == 2)
                {
                    rating = rating.Where(p => p.audit_object.education__institution.First().type_edu_id == 5 || p.audit_object.education__institution.First().type_edu_id == 8).ToList();
                }
                else if (type == 3)
                {
                    rating = rating.Where(p => p.audit_object.education__institution.First().type_edu_id == 13 || p.audit_object.education__institution.First().type_edu_id == 14).ToList();
                }
                else if (type == 4)
                {
                    rating = rating.Where(p => p.audit_object.education__institution.First().type_edu_id == 15).ToList();
                }
                rating = rating.OrderByDescending(p => p.sum).Take(10).ToList();
            }
            return(PartialView(rating));
        }
        public ActionResult InstitutionMonitoring(int edu_id, int?m)
        {
            education__institution edu = db.education__institution.Find(edu_id);

            ViewBag.groups = db.Groups.ToList();
            if (m == null)
            {
                monitoring mm = db.monitoring.OrderByDescending(p => p.date_end).FirstOrDefault(p => p.date_end < DateTime.Now && p.Rating.Count(a => a.audit_object_id == edu.audit_object_id) > 0);
                if (mm != null)
                {
                    m = mm.id;
                }
            }

            int place = 0;

            if (m != null)
            {
                Rating rating = db.Rating.First(p => p.monitoring_id == m && p.audit_object_id == edu.audit_object_id);
                place = db.Rating.Count(p => p.monitoring_id == m && p.sum > rating.sum) + 1;
            }
            ViewBag.place      = place;
            ViewBag.monitoring = m;
            return(View(edu));
        }
Example #3
0
        // GET: Experts/Details/5
        public ActionResult _answer_end(int site_id, int group_id, int?m)
        {
            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;

            if (m == null)
            {
                audit_object a          = db.audit_object.Find(site_id);
                monitoring   monitoring = db.monitoring.OrderByDescending(p => p.date_end).FirstOrDefault(p => p.date_end < DateTime.Now && p.Rating.Count(t => t.audit_object_id == site_id) > 0);
                if (monitoring != null)
                {
                    m = monitoring.id;
                }
            }
            List <Experts_comments> answers = db.Experts_comments.Where(p => p.site_experts.audit_object_id == site_id && p.site_experts.monitoring_id == m && p.Criteria.group_id == group_id && p.Criteria.type_organization != not_type_organization).ToList();
            List <Experts_comments> result  = new List <Experts_comments>();
            int             id = 1;
            List <Criteria> cr = db.Criteria.Where(p => p.group_id == group_id && p.type_organization != not_type_organization).ToList();

            foreach (Criteria c in cr)
            {
                List <Experts_comments> cr_answer = answers.Where(p => p.criteria_id == c.id).ToList();
                Experts_comments        one       = new Experts_comments();
                one.id          = id++;
                one.criteria_id = c.id;
                int count_cr = cr_answer.Count();
                one.Criteria = c;
                int sum = 0;
                for (int i = 0; i < cr_answer.Count(); ++i)
                {
                    one.answer         += cr_answer.ElementAt(i).answer;
                    one.site_experts_id = cr_answer.ElementAt(i).site_experts_id;
                    one.comment        += " " + cr_answer.ElementAt(i).comment;
                }
                if (count_cr != 0)
                {
                    one.answer = Convert.ToInt32(Math.Round(Convert.ToDouble(one.answer) / count_cr));
                }
                else
                {
                    one.answer = 0;
                }
                result.Add(one);
            }
            return(PartialView(result));
        }
Example #4
0
        public ActionResult _rating(int?id)
        {
            int           site   = (id != null) ? Convert.ToInt32(id) : Convert.ToInt32(Session["curator_site_id"]);
            audit_object  s      = db.audit_object.Find(site);
            monitoring    m      = db.monitoring.OrderByDescending(p => p.date_end).FirstOrDefault(p => p.date_end < DateTime.Now && p.Rating.Count(a => a.audit_object_id == site) > 0);
            List <Rating> rating = new List <Rating>();
            int           place  = 0;

            if (m != null)
            {
                rating = db.Rating.Where(p => p.monitoring_id == m.id).OrderByDescending(p => p.sum).ToList();
                for (int i = 0; i < rating.Count(); ++i)
                {
                    if (rating.ElementAt(i).audit_object_id == site)
                    {
                        place = i + 1;
                        break;
                    }
                }
            }
            ViewBag.place = place;
            return(PartialView(s));
        }
Example #5
0
        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"));
        }
Example #6
0
        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"));
        }