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