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)); }
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)); }