LogicSzs.cs 10.4 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ControlPanel.Models.Szs;
using ControlPanel.Interfaces.Reposytorys;
using ControlPanel.NHInplimentRepository;
using ControlPanel.LogicLayers;
using ControlPanel.Models;
using ControlPanel.Interfaces.Strategys;
using ControlPanel.Contexts;
using ControlPanel.ImplimentStrategys;

namespace ControlPanel.LogicLayers
{
    public class LogicSzs
    {
            public static LogicSzs instance = new LogicSzs();



            ILevelsRiversRepository _levelsriversrepository;
            IEventsRepository _eventrepository;
             IAgkRepository _agkrepository;
            
            
           



        public LogicSzs()
        {
            if (_levelsriversrepository==null) 
                _levelsriversrepository=new NHLevelsRiversRepository();

            if (_eventrepository == null)
                _eventrepository = new NHEventsRepository();

            if (_agkrepository == null)
                _agkrepository = new NHAgkRepository();
            
        }




            /// <summary>
            /// Полуяаем для данного СЗС, неподтвержденные сообщения
            /// </summary>
            /// <param name="RegKey"></param>
            /// <returns></returns>
            public List<ExtLevelRiver> GetLevelsNotConfirm(string RegKey)
            {
                List<ExtLevelRiver> result = new List<ExtLevelRiver>();
                List<LevelRiver> lstLevelRiver = new List<LevelRiver>();

                // Получаем все активные маршруты для данного СЗС 
                List<Route> lstRoute = LogicRouts.instance.GetRoutsByRegKey(RegKey);

                foreach (Route route in lstRoute)
                {
                    // Для каждого маршрута ищем неподтвержденные события событие Event
                    List<Event> lstEvent = LogicEvents.instance.GetEventsByRouteAndNotConfirm(route);

                    if (_levelsriversrepository==null) 
                        _levelsriversrepository=new NHLevelsRiversRepository();

                    foreach (Event _event in lstEvent)
                    {
                        LevelRiver levelriver = _levelsriversrepository.GetByID(_event.RefEventMessage.id);
                        lstLevelRiver.Add(levelriver);
                    }
                }

                //конвентируем в расширенные
                foreach (LevelRiver message in lstLevelRiver)
                {
                    var context = new ContextConvert<LevelRiver>(new ConvertLevelRiverForSzsDialog<LevelRiver>());
                    ExtLevelRiver extmsg = context.ExecuteOperation(message) as ExtLevelRiver;
                    if (extmsg != null)
                        result.Add(extmsg);
                }

                return result;
            }

            /// <summary>
            ///  Получаем последние сообщения для данного сзс
            /// </summary>
            /// <returns></returns>
            public List<ExtLevelRiver> GetLastExtLevelRiver(string RegKey)
            {
                List<ExtLevelRiver> result = new List<ExtLevelRiver>();
                List<LevelRiver> lstLevelRiver = new List<LevelRiver>();


                // Получаем все активные маршруты для данного СЗС 
                List<Route> lstRoute = LogicRouts.instance.GetRoutsByRegKey(RegKey);

                foreach (Route route in lstRoute)
                {
                    // Для каждого маршрута получаем последнее событие
                    Event _event = LogicEvents.instance.GetLastEventByRoute(route);

                    if (_event!=null)
                    {

                    if (_levelsriversrepository == null)
                        _levelsriversrepository = new NHLevelsRiversRepository();

                        LevelRiver levelriver = _levelsriversrepository.GetByID(_event.RefEventMessage.id);
                        lstLevelRiver.Add(levelriver);
                    }
                }
                

                    //конвентируем в расширенные
                foreach (LevelRiver message in lstLevelRiver)
                {
                    var context = new ContextConvert<LevelRiver>(new ConvertLevelRiverForSzsDialog<LevelRiver>());
                    ExtLevelRiver extmsg = context.ExecuteOperation(message) as ExtLevelRiver;
                    if (extmsg != null)
                        result.Add(extmsg);
                }

                return result;
            }





            public int Count(string date, string regkey)
            {

                int result = 0;
                try
                {

                    // Получаем все активные маршруты для данного СЗС 
                    List<Route> lstRoute = LogicRouts.instance.GetRoutsByRegKey(regkey);

                    foreach (Route route in lstRoute)
                    {

                        if (_eventrepository == null)
                            _eventrepository = new NHEventsRepository();

                        result += _eventrepository.Count(date, route, false);
                    }
                }
                catch (Exception)
                {


                }

                return result;

            }

        public List<MsgLog> GetLog(int page, int start, int limit, string date, string regkey)
        {
              List<MsgLog> result = new List<MsgLog>();
            try
            {

                // Получаем все активные маршруты для данного СЗС 
                List<Route> lstRoute = LogicRouts.instance.GetRoutsByRegKey(regkey);

                foreach (Route route in lstRoute)
                {

                                if (_eventrepository == null)
                                   _eventrepository = new NHEventsRepository();

                            DateTime dt=Convert.ToDateTime(date);

                                List<Event> lstEvent = _eventrepository.GetLogForSzs(page, start, limit * page, route,dt).ToList();

                               // формеруем лист MSgLog 
                                    if (_levelsriversrepository==null) 
                                        _levelsriversrepository=new NHLevelsRiversRepository();

                                    foreach (Event _event in lstEvent)
                                    {
                                        LevelRiver levelriver = _levelsriversrepository.GetByID(_event.RefEventMessage.id);

                                        try 
                                        {




                                            MsgLog _msgLog = new MsgLog();
                                            try
                                            {

                                                _msgLog.id = levelriver.id;
                                                _msgLog.titledatetimedevice = levelriver.datetimedevice.ToString("yyyy-MM-dd HH:mm:ss");



                                                if (_agkrepository == null)
                                                    _agkrepository = new NHAgkRepository();
                                                Agk agk = _agkrepository.GetByID(levelriver.RefMessageAgk.id);


                                                DateTime _dtt=Convert.ToDateTime("2005-01-01 00:00:00");
                                                if (_event.s3 > _dtt)
                                                    _msgLog.isconfirmed = true; 
                                                else
                                                    _msgLog.isconfirmed = false;


                                                if (!_msgLog.isconfirmed)
                                                {
                                                    _msgLog.color = "btnred100";
                                                    _msgLog.img = "noconfirm.png";
                                                }
                                                else
                                                {
                                                    _msgLog.color = "btngreen100";
                                                    _msgLog.img = "confirm.png";
                                                }


                                                string titlemsg = "";
                                                switch (levelriver.causeevent)
                                                {
                                                    case "норм":
                                                        titlemsg = "Уровень реки в норме 'НОРМ'";
                                                        break;
                                                    case "ня":
                                                        titlemsg = "Уровень реки превышен 'НЯ'";
                                                        break;
                                                    case "оя":
                                                        titlemsg = "Высокий  уровень реки 'ОЯ'";
                                                        break;
                                                };


                                                _msgLog.title = "АГК-" + agk.number + " " + agk.river + "  " + titlemsg + ", уровень по БСВ " + levelriver.levelbsv + " м";



                                                result.Add(_msgLog);

                                            }
                                            catch (Exception ex)
                                            {
                                               

                                            }



                                        }
                                        catch(Exception) 
                                        {

                                        }
                                        
                                    }

                }
            }
            catch (Exception)
            {
            }

            return result;
        }
    

    }
}