示例#1
0
        /// <summary>
        /// 读取通用实时报警
        /// </summary>
        /// <returns></returns>
        public JsonResult ScadaTableRealAlarm(JsonExcel excelModels)
        {
            var result = Pager.Paging(null, 0);

            if (excelModels == null)
            {
                return(Json(result, JsonRequestBehavior.AllowGet));
            }
            if (excelModels.devices == null || excelModels.devices.Count <= 0)
            {
                return(Json(result, JsonRequestBehavior.AllowGet));
            }
            var objs = excelModels.devices;
            List <ScadaGreneralAlarmModel> alarms     = new List <ScadaGreneralAlarmModel>();
            InfluxDBHistoryResult          realResult = null;

            List <string> dids       = new List <string>();
            List <string> tableioids = new List <string>();

            foreach (var item in excelModels.devices)
            {
                if (!dids.Contains(item.IO_DEVICE_ID.ToString()))
                {
                    dids.Add(item.IO_DEVICE_ID.ToString());
                }
                if (!tableioids.Contains(item.CurrentIO))
                {
                    tableioids.Add(item.CurrentIO);
                }
            }
            realResult = mWebInfluxDbManager.DbQuery_Alarms(dids.ToList(), "6h", "", "", 2000, 1);



            if (realResult != null && realResult.Seres.Count() > 0)
            {
                var s = realResult.Seres.First();
                for (int i = 0; i < s.Values.Count; i++)
                {
                    ScadaGreneralAlarmModel mymodel = new ScadaGreneralAlarmModel();

                    int index = s.Columns.IndexOf("time");

                    object time = s.Values[i][index];
                    mymodel.time = time != null?time.ToString() : "";



                    index = -1;
                    index = s.Columns.IndexOf("field_io_alarm_date");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_ALARM_DATE = v != null?v.ToString() : "";
                    }

                    index = -1;
                    index = s.Columns.IndexOf("field_io_alarm_disposalidea");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_ALARM_DISPOSALIDEA = v != null?v.ToString() : "";
                    }

                    index = -1;
                    index = s.Columns.IndexOf("field_io_alarm_disposaluser");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_ALARM_DISPOSALUSER = v != null?v.ToString() : "";
                    }

                    index = -1;
                    index = s.Columns.IndexOf("field_io_alarm_level");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_ALARM_LEVEL = v != null?v.ToString() : "";
                    }

                    index = -1;
                    index = s.Columns.IndexOf("field_io_alarm_type");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_ALARM_TYPE = v != null?v.ToString() : "";
                    }

                    index = -1;
                    index = s.Columns.IndexOf("field_io_alarm_value");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_ALARM_VALUE = v != null?v.ToString() : "";
                    }



                    index = -1;
                    index = s.Columns.IndexOf("field_io_name");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_NAME = v != null?v.ToString() : "";
                    }


                    index = -1;
                    index = s.Columns.IndexOf("tag_did");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_DEVICE_ID = v != null?v.ToString() : "";
                    }

                    index = -1;
                    index = s.Columns.IndexOf("tag_cid");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_COMMUNICATE_ID = v != null?v.ToString() : "";
                    }

                    index = -1;
                    index = s.Columns.IndexOf("tag_sid");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_SERVER_ID = v != null?v.ToString() : "";
                    }

                    index = -1;
                    index = s.Columns.IndexOf("tag_ioid");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.IO_ID = v != null?v.ToString() : "";
                    }
                    index = -1;
                    index = s.Columns.IndexOf("tag_device_name");
                    if (index >= 0)
                    {
                        object v = s.Values[i][index];
                        mymodel.DEVICE_NAME = v != null?v.ToString() : "";
                    }

                    index = -1;
                    index = s.Columns.IndexOf("field_io_label");
                    if (index >= 0)
                    {
                        var search = objs.Find(x => x.IO_DEVICE_ID == mymodel.IO_DEVICE_ID);
                        if (search != null)
                        {
                            string[]      titles    = search.IOPARATITLES.Split(',');
                            List <string> ioids     = search.IOPARAS.Split(',').ToList();
                            int           nameindex = ioids.FindIndex(x => x == mymodel.IO_ID);
                            if (nameindex >= 0)
                            {
                                mymodel.IO_LABEL = titles[nameindex];
                            }
                        }
                    }
                    if (tableioids.Contains(mymodel.IO_ID))
                    {
                        alarms.Add(mymodel);
                    }
                }
            }

            result = Pager.Paging(alarms, realResult.RecordCount);
            //读取以下10行的实时数据,从influxDB中读取
            return(Json(result, JsonRequestBehavior.AllowGet));
        }
示例#2
0
        public JsonResult LoadRealTable(JsonExcel excelModels)
        {
            CurrentPoint current = new CurrentPoint();

            current.IO = excelModels.CurrentIOID;

            List <DeviceGroupModel> deviceModels = excelModels.devices;

            //读取所有的实时数据,并加载 mWebInfluxDbManager
            List <InfluxDBQueryPara> devices = new List <InfluxDBQueryPara>();

            foreach (DeviceGroupModel res in deviceModels)
            {
                InfluxDBQueryPara data = new InfluxDBQueryPara();
                data.IOCommunicateID = res.IO_COMM_ID;
                data.IODeviceID      = res.IO_DEVICE_ID;
                data.IOServerID      = res.IO_SERVER_ID;
                data.UpdateCycle     = res.UpdateCycle;
                devices.Add(data);
            }

            IEnumerable <IEnumerable <Serie> > realResult = mWebInfluxDbManager.MultiQueryReal(devices);

            #region 获取当前选择的Io点的实时值
            if (!string.IsNullOrWhiteSpace(excelModels.CurrentCommunicateID) && !string.IsNullOrWhiteSpace(excelModels.CurrentDeviceID) && !string.IsNullOrWhiteSpace(excelModels.CurrentServerID) && !string.IsNullOrWhiteSpace(excelModels.CurrentIOID) && !string.IsNullOrWhiteSpace(excelModels.CurrentGroupID))
            {
                string           IO_SERVER_ID = excelModels.CurrentServerID;
                string           IO_COMM_ID   = excelModels.CurrentCommunicateID;
                string           IO_DEVICE_ID = excelModels.CurrentDeviceID;
                string           IO_ID        = excelModels.CurrentIOID;
                string           GroupId      = excelModels.CurrentGroupID;
                int              devIndex     = devices.FindIndex(x => x.IOServerID == IO_SERVER_ID && x.IOCommunicateID == IO_COMM_ID && x.IODeviceID == IO_DEVICE_ID);
                DeviceGroupModel selItem      = deviceModels.Find(x => x.IO_SERVER_ID == IO_SERVER_ID && x.IO_COMM_ID == IO_COMM_ID && x.IO_DEVICE_ID == IO_DEVICE_ID && x.GroupId.ToString() == GroupId);
                List <string>    paranames    = selItem.IOPARANAMES.Split(',').ToList();
                List <string>    ioids        = selItem.IOPARAS.Split(',').ToList();
                List <string>    titles       = selItem.IOPARATITLES.Split(',').ToList();
                int              ioIndex      = ioids.FindIndex(x => x.Trim() == IO_ID);
                if (devIndex >= 0 && selItem != null && paranames.Count > 0 && ioids.Count > 0 && ioids.Count == paranames.Count && ioIndex >= 0)
                {
                    string ioName = paranames[ioIndex].Trim();
                    current.Name = titles[ioIndex].Trim();
                    var serie = realResult.ElementAt(devIndex).First();
                    if (serie.Values.Count > 0)
                    {
                        current.Time = serie.Values[0][serie.Columns.IndexOf("time")].ToString();//获取时间
                        int recordindex = serie.Columns.IndexOf("field_" + ioName.Trim().ToLower() + "_value");
                        if (recordindex >= 0)
                        {
                            current.Value = serie.Values[0][recordindex].ToString();
                        }
                    }
                }
            }
            #endregion

            for (int i = 0; i < excelModels.models.Count; i++)
            {
                PropertyInfo[] properties = excelModels.models[i].GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
                if (properties.Length <= 0)
                {
                    continue;
                }
                foreach (PropertyInfo item in properties)
                {
                    string name  = item.Name;
                    object value = item.GetValue(excelModels.models[i], null);
                    if (value != null && value.ToString() != "")
                    {
                        if (value.ToString().Split('/').Length >= 8)
                        {
                            try
                            {
                                string           GroupId      = value.ToString().Split('/')[1];
                                string           IO_SERVER_ID = value.ToString().Split('/')[2];
                                string           IO_COMM_ID   = value.ToString().Split('/')[3];
                                string           IO_DEVICE_ID = value.ToString().Split('/')[4];
                                string           IO_ID        = value.ToString().Split('/')[5];
                                string           vtype        = value.ToString().Split('/')[7];
                                string           iostatus     = "异常";
                                string           iotime       = "";
                                string           iovalue      = "";
                                int              devIndex     = devices.FindIndex(x => x.IOServerID == IO_SERVER_ID && x.IOCommunicateID == IO_COMM_ID && x.IODeviceID == IO_DEVICE_ID);
                                DeviceGroupModel selItem      = deviceModels.Find(x => x.IO_SERVER_ID == IO_SERVER_ID && x.IO_COMM_ID == IO_COMM_ID && x.IO_DEVICE_ID == IO_DEVICE_ID && x.GroupId.ToString() == GroupId);
                                List <string>    paranames    = selItem.IOPARANAMES.Split(',').ToList();
                                List <string>    ioids        = selItem.IOPARAS.Split(',').ToList();
                                int              ioIndex      = ioids.FindIndex(x => x.Trim() == IO_ID);
                                if (devIndex >= 0 && selItem != null && paranames.Count > 0 && ioids.Count > 0 && ioids.Count == paranames.Count && ioIndex >= 0)
                                {
                                    string ioName = paranames[ioIndex].Trim();
                                    var    serie  = realResult.ElementAt(devIndex).First();
                                    if (serie.Values.Count > 0)
                                    {
                                        iotime = serie.Values[0][serie.Columns.IndexOf("time")].ToString();//获取时间
                                        int recordindex = serie.Columns.IndexOf("field_" + ioName.Trim().ToLower() + "_value");
                                        if (recordindex >= 0)
                                        {
                                            iostatus = "正常";
                                            iovalue  = serie.Values[0][recordindex].ToString();
                                        }
                                        else
                                        {
                                            iostatus = "异常";
                                        }
                                    }
                                    else
                                    {
                                        iostatus = "异常";
                                    }
                                }
                                else
                                {
                                    iostatus = "异常";
                                }

                                switch (vtype.Trim().ToLower())
                                {
                                case "time":
                                    item.SetValue(excelModels.models[i], iotime);
                                    break;

                                case "value":
                                    item.SetValue(excelModels.models[i], iovalue);
                                    break;

                                case "status":
                                    item.SetValue(excelModels.models[i], iostatus);
                                    break;
                                }
                            }
                            catch
                            {
                                continue;
                            }
                        }
                    }
                }
            }
            var result = Pager.ScadaTablePaging(excelModels.models, current, excelModels.models.Count());
            return(Json(result, JsonRequestBehavior.AllowGet));
        }