Esempio n. 1
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));
        }
Esempio n. 2
0
        public JsonResult GetReadData(List <JsIOPara> ioparas)
        {
            List <JsIOPara> results = new List <JsIOPara>();

            if (ioparas != null)
            {
                ///删除重复项

                for (int i = ioparas.Count - 1; i >= 0; i--)
                {
                    if (string.IsNullOrWhiteSpace(ioparas.ElementAt(i).ServerID) || string.IsNullOrWhiteSpace(ioparas.ElementAt(i).DeviceID) || string.IsNullOrWhiteSpace(ioparas.ElementAt(i).ParaID) || string.IsNullOrWhiteSpace(ioparas.ElementAt(i).CommunicateID))
                    {
                        ioparas.Remove(ioparas.ElementAt(i));
                    }
                }
                //读取所有的实时数据,并加载 mWebInfluxDbManager
                List <InfluxDBQueryPara> devices = new List <InfluxDBQueryPara>();
                foreach (JsIOPara res in ioparas)
                {
                    InfluxDBQueryPara data = new InfluxDBQueryPara();
                    data.IOCommunicateID = res.CommunicateID;
                    data.IODeviceID      = res.DeviceID;
                    data.IOServerID      = res.ServerID;
                    data.UpdateCycle     = int.Parse(res.UpdateCycle);
                    if (!devices.Exists(x => x.IOCommunicateID == data.IOCommunicateID && x.IOServerID == data.IOServerID && x.IODeviceID == data.IODeviceID))
                    {
                        devices.Add(data);
                    }
                }


                IEnumerable <IEnumerable <Serie> > realResult = mWebInfluxDbManager.MultiQueryReal(devices.ToList());
                for (int i = 0; i < devices.Count; i++)
                {
                    InfluxDBQueryPara influxpara  = devices[i];
                    List <JsIOPara>   deviceparas = ioparas.FindAll(x => x.CommunicateID == devices[i].IOCommunicateID && x.DeviceID == devices[i].IODeviceID && x.ServerID == devices[i].IOServerID);
                    try
                    {
                        Serie serie = realResult.ElementAt(i).First();//获取当前设备的查询数据
                        if (serie != null)
                        {
                            int timeindex = serie.Columns.IndexOf("time");
                            for (int c = 0; c < deviceparas.Count; c++)
                            {
                                JsIOPara para       = deviceparas[c];
                                int      valueindex = serie.Columns.IndexOf("field_" + deviceparas[c].IoName.Trim().ToLower() + "_value");
                                if (timeindex >= 0 && valueindex >= 0)
                                {
                                    para.Value    = serie.Values[i][valueindex].ToString();
                                    para.Status   = 1;
                                    para.DateTime = serie.Values[i][timeindex].ToString();
                                    DateTime dt;
                                    if (DateTime.TryParse(para.DateTime, out dt))
                                    {
                                        para.DateTime = Convert.ToDateTime(para.DateTime).ToString("yyyy-MM-dd HH:mm:ss");
                                    }
                                    else
                                    {
                                        para.QualityStamp = "BAD";
                                    }
                                    if (para.Value == "" || para.Value == "-9999")
                                    {
                                        para.QualityStamp = "BAD";
                                    }
                                    para.QualityStamp = "GOOD";
                                }
                                else
                                {
                                    para.Value        = "";
                                    para.DateTime     = "";
                                    para.Status       = 0;
                                    para.QualityStamp = "BAD";
                                }
                                results.Add(para);
                            }
                        }
                    }
                    catch
                    {
                    }
                }
            }
            else
            {
                results = new List <JsIOPara>();
            }
            var result = Pager.Paging(results, results.Count);

            //读取以下10行的实时数据,从influxDB中读取
            return(Json(result, JsonRequestBehavior.AllowGet));
        }