DataSzsController.cs 9.83 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json.Linq;
using ControlPanel.Models;
using System.Runtime.Serialization;
using ControlPanel.LogicLayers;
using System.Xml;
using System.Net;

using ControlPanel.Models.Response;


namespace ControlPanel.Controllers
{
    public class DataSzsController : ApiController
    {

        /// <summary>
        /// Получение неподтвержденных сообщений для подписчика
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public JObject Post(JObject data)
        {
            List<LevelRiverAlarm> lastlevelrivers = new List<LevelRiverAlarm>();
            List<LevelRiverAlarm> notconfirmlevelrivers = new List<LevelRiverAlarm>();
            List<Route> lstRoute = new List<Route>();
            List<Agk> lstAgk = new List<Agk>();

            LevelRiverAlarm alarmlevelriver = null; // событие для подтверждения

            string Subscriber = "";
            string titlecontact = "";
            bool siren = false; // не включать сирену


            try
            {
                var RegKey = data["RegKey"];
                var vers = data["SoftVersion"];
                var IDTeamViewer = data["IDTeamViewer"];
    
                bool claim = false;  //  не требует помощи
                try
                {
                    var Claim = data["claim"];
                    claim = Convert.ToBoolean(Claim.ToString());
                }
                catch(Exception)
                {
                }

                string key = RegKey.ToString();
               LogicLiveSubscribers.instance.UpdateStatusSubscriver(key, vers.ToString());
               LogicLiveSubscribers.instance.UpdateClaimSubscriver(key, claim);

                try
                {
                    // Получаем маршруты для данного СЗС
                    lstRoute = LogicRouts.instance.GetRoutsByRegKey(key);

                    // Получаем список АГК 
                    foreach (Route route in lstRoute)
                    {
                        Agk agk = LogicAgk.instance.GetById(route.RefRouteAgk.id);
                        lstAgk.Add(agk);
                    }
                }
                catch (Exception e)
                {
                 
                }

                try
                {
                    // неподтвержденные события 
                    notconfirmlevelrivers = LogicLevelsRivers.instance.GetNotConfirmLevelRivers(lstRoute);


                }
                catch (Exception e)
                {
                 
                }

                try
                {

                    if (notconfirmlevelrivers.Count > 0)
                    {

                        notconfirmlevelrivers.Sort(delegate(LevelRiverAlarm obj1, LevelRiverAlarm obj2)
                        { return obj1.id.CompareTo(obj2.id); });

 
                        alarmlevelriver = notconfirmlevelrivers[0];

                    }

                }
                catch (Exception e)
                {
                    
                }

                try
                {
                    // текущее состояние по всем станциям
                    lastlevelrivers = LogicLevelsRivers.instance.GetLastLevelRivers(lstRoute);

                }
                catch (Exception e)
                {
                   
                }


                try
                {
                    // название населенного пункта
                    List<Subscribers> lstSub = LogicSubscribers.instance.GetSubByRegKey(key);
                    Subscriber = lstSub[0].Name;
                    titlecontact = lstSub[0].phoneszs;
                    siren = lstSub[0].siren;

                    Subscribers sub = lstSub[0];
                    sub.idteamviewer = (string)IDTeamViewer;
                    LogicSubscribers.instance.Uodate(sub);

                }
                catch (Exception e)
                {
                    
                }
            }
            catch (Exception ex)
            {
            }

          

           List<EventAgk> lrlast = new List<EventAgk>();

            foreach (LevelRiverAlarm obj in lastlevelrivers)
           { 
               int id_status;

               if (obj.causeevent == "ня")
                   id_status = 1;
               else  if (obj.causeevent == "оя")
                   id_status = 2;
               else
                   id_status=0;

               try
               {

                   Agk objagk = LogicAgk.instance.GetById(obj.RefMessageAgk.id);

                   EventAgk eventagk = new EventAgk
                   {
                          id=obj.id,
                          id_agk=objagk.number,
                          river = obj.installplace,
                          datetime=obj.datetimedevice.ToString("dd.MM.yyyy HH:mm:ss"),
                          value=obj.levelbsv.ToString(),
                          id_status=id_status,		
                          repair=obj.repair,		// true -repair; false- no repair
                          opendoor=obj.opendoor,	// true - open; false-close
                          veracity=obj.datetimeveracity, // veracity -true, no veracity -false;
                   };

                   lrlast.Add(eventagk);
               }
               catch (Exception e)
               {
                 
               }

           }


            List<EventAgk> lralarm= new List<EventAgk>();

            if (alarmlevelriver != null)
            {

                int id_status;

                if (alarmlevelriver.causeevent == "ня")
                    id_status = 1;
                else if (alarmlevelriver.causeevent == "оя")
                    id_status = 2;
                else
                    id_status = 0;

                Agk objagk1 = LogicAgk.instance.GetById(alarmlevelriver.RefMessageAgk.id);


                  EventAgk eventagk = new EventAgk
                   {
                       id = alarmlevelriver.id,
                       id_agk = objagk1.number,
                       river = alarmlevelriver.installplace,
                       datetime = alarmlevelriver.datetimedevice.ToString("dd.MM.yyyy HH:mm:ss"),
                       value = alarmlevelriver.levelbsv.ToString(),
                       id_status=id_status,
                       repair = alarmlevelriver.repair,		// true -repair; false- no repair
                       opendoor = alarmlevelriver.opendoor,	// true - open; false-close
                       veracity = alarmlevelriver.datetimeveracity, // veracity -true, no veracity -false;
                   };
                  lralarm.Add( eventagk);

            }
            else
            {

            }

            JObject result = JObject.FromObject(new
            {
                 titlesubscriber=Subscriber,
                 titlecontact=titlecontact, 
                 siren=siren,
                 lsteventagkconfirm=lralarm,
                 lsteventagkstate=lrlast
            });


            //  StreamWriter.WriteLine(result);
            //  Обновляем поле S2 в таблице Event для каждого сообщения 

            List<LevelRiver> lr = new List<LevelRiver>();

            try
            {
                LevelRiver o = new LevelRiver
                {
                    id = alarmlevelriver.id,
                    RefMessageAgk = alarmlevelriver.RefMessageAgk,
                    datetimedevice = alarmlevelriver.datetimedevice,
                    datetimeveracity = alarmlevelriver.datetimeveracity,
                    datetimeserver = alarmlevelriver.datetimeserver,
                    latitude = alarmlevelriver.latitude,
                    longitude = alarmlevelriver.longitude,
                    coordveracity = alarmlevelriver.coordveracity,
                    installplace = alarmlevelriver.installplace,
                    levelbsv = alarmlevelriver.levelbsv,
                    levelpointsuspen = alarmlevelriver.levelpointsuspen,
                    levelzeropost = alarmlevelriver.levelzeropost,
                    causeevent = alarmlevelriver.causeevent,
                    repair = alarmlevelriver.repair,
                    opendoor=alarmlevelriver.opendoor

                };

                lr.Add(o);
            }
            catch (Exception)
            {
            }

            LogicEvents.instance.UpdateFieldS2(lstRoute, lr);
            return result;
        }








        private bool GetInfoNewVersion(string versionsoft)
        {

            bool flag = false;

            try
            {


                XmlDocument xml = new XmlDocument();
                xml.Load(@"C:\SzsWeb\version.xml");
                if (xml != null)
                {
                    foreach (XmlElement element in xml.GetElementsByTagName("info"))
                    {
                        foreach (XmlElement e in element)
                        {
                            if (e.Name.CompareTo("version") == 0)
                            {
                                string version = e.InnerText.Trim();

                                if (versionsoft != version)
                                    flag = true;

                            }
                        }
                    }
                };


            }
            catch (Exception)
            {

            }



            return flag;


        }




        // PUT api/getlevelsrivers/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/getlevelsrivers/5
        public void Delete(int id)
        {
        }









    }
}