private void LoadAllHistoryData() { var probeName = ""; var startTime = new DateTime(); var endTime = new DateTime(); Invoke(new MethodInvoker(delegate { lblLoading.Visible = true; btnQuery.Text = @"查询中..."; btnQuery.Enabled = false; probeName = lstProbeName.SelectedValue.ToString(); startTime = Convert.ToDateTime(dateTimeStart.Text); endTime = Convert.ToDateTime(dateTimeEnd.Text); rbtnRealtime.Enabled = false; rbtnHistory.Enabled = false; })); var datas = GasConcentrationProbeData.FindHistaryData(probeName, startTime, endTime); // load监控系统原始数据M历史数据 LoadHistoryDataM(tChartM, datas); // load同一工序条件下瓦斯浓度变化值N历史数据 LoadHistoryDataN(tChartN, datas); // loadT2瓦斯浓度平均增加值Q历史数据 LoadHistoryDataT2(tChartT2); Invoke(new MethodInvoker(delegate { lblLoading.Visible = false; btnQuery.Text = @"查询"; btnQuery.Enabled = true; rbtnRealtime.Enabled = true; rbtnHistory.Enabled = true; })); }
/// <summary> /// 删除(必须实装) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelete_Click(object sender, EventArgs e) { if (Alert.confirm(Const_GE.DEL_CONFIRM_MSG)) { // 获取已选择明细行的索引 var iSelIdxsArr = GetSelIdxs(); var pkIdxArrList = new List <string[]>(); for (var i = 0; i < iSelIdxsArr.Length; i++) { // 获取主键 var iPk1 = fpGasConcentrationProbeDataInfo.Sheets[0].Cells[iSelIdxsArr[i], _primaryKey1Index].Text; var iPk2 = fpGasConcentrationProbeDataInfo.Sheets[0].Cells[iSelIdxsArr[i], _primaryKey2Index].Text; var strArr = new string[2]; strArr[0] = iPk1; strArr[1] = iPk2; pkIdxArrList.Add(strArr); } // 瓦斯浓度探头数据删除 GasConcentrationProbeData.DeleteAll(pkIdxArrList); // 加载瓦斯浓度探头数据信息 loadGasConcentrationProbeDataInfo(); // 设置farpoint焦点(必须实装) fpGasConcentrationProbeDataInfo.Sheets[0].SetActiveCell(iSelIdxsArr[0], 0); } }
/// <summary> /// 设置瓦斯浓度探头数据 /// </summary> public void setGasConcentrationProbeData(string strPrimaryKey) { if (!Validator.IsEmpty(strPrimaryKey)) { var data = GasConcentrationProbeData.TryFind(strPrimaryKey); // 数值 if (data != null) { txtProbeValue.Text = data.ProbeValue.ToString(); // 时间 dtpRecordTime.Text = data.RecordTime.ToString("yyyy-MMMM-dd hh:mm:ss"); } } }
// 更新M_N数据 // 同一工序下,瓦斯浓度变化值N private void UpdateMnData() { if (CurrentProbe == null) { return; } var datas = GasConcentrationProbeData.FindNewRealData(CurrentProbe.ProbeId, 2); var time = datas[0].RecordTime; var value = datas[0].ProbeValue; var value1 = datas[1].ProbeValue; var valueN = value - value1; // 判断是否是最新数据 if (time != _lastTimeMn && _lastTimeMn != DateTime.MinValue) { _lastTimeMn = time; // 往DGV中填充数据 dgvData.Rows.Add(value + "%", time); if (dgvData.Rows.Count > 0) { // 定位滚动条 dgvData.FirstDisplayedScrollingRowIndex = dgvData.Rows.Count - 1; // 瓦斯浓度超过安全范围 if (value >= YellowDataThreshold && value <= RedDataThreshold) { dgvData.Rows[dgvData.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Yellow; } else if (value > RedDataThreshold) { dgvData.Rows[dgvData.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Red; } } TeeChartUtil.addSingleData2TeeChart(tChartM, DataCountPerFrame, time, value); TeeChartUtil.addSingleData2TeeChart(tChartN, DataCountPerFrame, time, valueN); } else { _lastTimeMn = time; } }
private void UpdateT2Data() { if (T2Probe.ProbeId == string.Empty) { return; } var datas = GasConcentrationProbeData.FindNewRealData(T2Probe.ProbeId, 2); var time = datas[0].RecordTime; var value0 = datas[0].ProbeValue; var value1 = datas[1].ProbeValue; // 判断是否是最新数据 if (time == _lastTimeT2) { return; } _lastTimeT2 = time; var value = value1 - value0; TeeChartUtil.addSingleData2TeeChart(tChartT2, DataCountPerFrame, time, value); }
/// <summary> /// 开始实时监控 /// </summary> private void StartRealTimeCurveMonitoring() { // 检查是否选择了巷道和传感器 if (!Check()) { return; } // reset Tee Chart TeeChartUtil.resetTeeChart(tChartM); // tChart1, 监控系统原始数据M TeeChartUtil.resetTeeChart(tChartT2); // tChart2, T2瓦斯浓度平均增加值Q TeeChartUtil.resetTeeChart(tChartN); // tChart3, 同一工序条件下瓦斯浓度变化值N // 清空datagridview dgvData.Rows.Clear(); // 获取指定探头的旧数据 ----------用来填充曲线。 var dsData = GasConcentrationProbeData.FindHistaryDataTop(CurrentProbe.ProbeId, DataCountPerFrame); AddDataSet2TeeChart(tChartM, dsData, "M"); AddDataSet2TeeChart(tChartN, dsData, "N"); if (!String.IsNullOrEmpty(T2Probe.ProbeId)) { var ds = GasConcentrationProbeData.FindHistaryDataTop(T2Probe.ProbeId, DataCountPerFrame); AddDataSet2TeeChart(tChartT2, ds, "T2"); } if (dgvData.Rows.Count > 0) { // 定位滚动条 dgvData.FirstDisplayedScrollingRowIndex = dgvData.Rows.Count - 1; } // 获取旧数据 ---------- End timer1.Enabled = true; // 启动定时器 }
// 更新M_N数据 // 同一工序下,瓦斯浓度变化值N private void updateMNData() { var datas = GasConcentrationProbeData.FindNewRealData(currentProbeId, 2); var time = datas[0].RecordTime; var time1 = datas[1].RecordTime; var value = datas[0].ProbeValue; var value1 = datas[1].ProbeValue; var valueN = value - value1; // 判断是否是最新数据 if (time != _LastTimeMN) { _LastTimeMN = time; // 往DGV中填充数据 _dgvData.Rows.Add(value + "%", time); if (_dgvData.Rows.Count > 0) { // 定位滚动条 _dgvData.FirstDisplayedScrollingRowIndex = _dgvData.Rows.Count - 1; // 瓦斯浓度超过安全范围 if (value >= yellowDataThreshold && value <= redDataThreshold) { _dgvData.Rows[_dgvData.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Yellow; } else if (value > redDataThreshold) { _dgvData.Rows[_dgvData.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Red; } } TeeChartUtil.addSingleData2TeeChart(tChartM, DEFAULT_DATA_SHOW_COUNT, time, value); TeeChartUtil.addSingleData2TeeChart(tChartN, DEFAULT_DATA_SHOW_COUNT, time, valueN); } }
/// <summary> /// loadT2瓦斯浓度平均增加值Q历史数据 /// </summary> private void LoadHistoryDataT2(TChart tChart) { var datas = GasConcentrationProbeData.FindHistaryData( T2Probe.ProbeId, Convert.ToDateTime(dateTimeStart.Text), Convert.ToDateTime(dateTimeEnd.Text) ); var sqlCnt = 0; if (datas.Length > 0) { sqlCnt = datas.Length; } if (sqlCnt > 0) { tChart.Header.Text = "T2瓦斯浓度平均增加值Q"; AddDataSet2TeeChart(tChart, datas, "T2"); } else { //Alert.alert("没有T2瓦斯浓度数据!"); tChart.Header.Text = "没有T2瓦斯浓度数据!"; } }
/// <summary> /// 获取指定探头的最新2行实时数据 /// </summary> /// <param name="iProbeId"></param> /// <returns></returns> //public static DataSet getLatest2RowsData(string iProbeId) //{ // StringBuilder sqlStr = new StringBuilder(); // sqlStr.Append("SELECT TOP 2 * FROM " + GasConcentrationProbeDataDbConstNames.TABLE_NAME); // sqlStr.Append(" WHERE " + GasConcentrationProbeDataDbConstNames.PROBE_ID + " = " + iProbeId); // sqlStr.Append(" ORDER BY " + GasConcentrationProbeDataDbConstNames.PROBE_DATA_ID + " DESC"); // ManageDataBase db = new ManageDataBase(DATABASE_TYPE.GasEmissionDB); // DataSet ds = db.ReturnDS(sqlStr.ToString()); // return ds; //} private void updateT2Data() { if (_T2Id == string.Empty) { tChartT2.Header.Text = "该巷道没有设置T2传感器."; return; } var datas = GasConcentrationProbeData.FindNewRealData(_T2Id, 2); var time = datas[0].RecordTime; var value0 = datas[0].ProbeValue; var value1 = datas[1].ProbeValue; // 判断是否是最新数据 if (time != _LastTimeT2) { _LastTimeT2 = time; var value = value1 - value0; t2DeltaSumValue += value; value = t2DeltaSumValue / ++t2DataCount; TeeChartUtil.addSingleData2TeeChart(tChartT2, DEFAULT_DATA_SHOW_COUNT, time, value); } }
/// <summary> /// 提交 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSubmit_Click(object sender, EventArgs e) { // 验证 if (!check()) { DialogResult = DialogResult.None; return; } DialogResult = DialogResult.OK; // 创建一个瓦斯浓度探头数据实体 var gasConcentrationProbeDataEntity = new GasConcentrationProbeData(); // 探头编号 gasConcentrationProbeDataEntity.Probe.ProbeId = Convert.ToString(_lstProbeName.SelectedValue); // 探头数值 double dProbeValue = 0; if (double.TryParse(txtProbeValue.Text.Trim(), out dProbeValue)) { gasConcentrationProbeDataEntity.ProbeValue = dProbeValue; } // 记录时间 gasConcentrationProbeDataEntity.RecordTime = dtpRecordTime.Value; // 记录类型 gasConcentrationProbeDataEntity.RecordType = Const_GE.RECORDTYPE_PEOPLE; OPERATION_TYPE opType; var bResult = false; if (_bllType == "add") { // 瓦斯浓度探头数据登录 gasConcentrationProbeDataEntity.CreateAndFlush(); bResult = true; opType = OPERATION_TYPE.ADD; if (bResult) { #region 通知服务器预警数据已更新 var workingfaceEnt = selectTunnelUserControl1.SelectedTunnel.WorkingFace; var msg = new UpdateWarningDataMsg(workingfaceEnt.WorkingFaceId, selectTunnelUserControl1.SelectedTunnel.TunnelId, DayReportHc.TableName, opType, gasConcentrationProbeDataEntity.RecordTime); SocketUtil.SendMsg2Server(msg); #endregion } } else { // 主键 gasConcentrationProbeDataEntity.ProbeDataId = Convert.ToInt32(_iPK); // 探头管理信息修改 gasConcentrationProbeDataEntity.SaveAndFlush(); opType = OPERATION_TYPE.UPDATE; #region 通知服务器预警数据已更新 var workingfaceEnt = selectTunnelUserControl1.SelectedTunnel.WorkingFace; var msg = new UpdateWarningDataMsg(workingfaceEnt.WorkingFaceId, selectTunnelUserControl1.SelectedTunnel.TunnelId, DayReportHc.TableName, opType, gasConcentrationProbeDataEntity.RecordTime); SocketUtil.SendMsg2Server(msg); #endregion } // 添加\修改成功的场合 if (bResult) { // 如何探头编号发生改变则不更新管理画面的farpoint if (GasConcentrationProbeDataManamement._probeId != Convert.ToString(_lstProbeName.SelectedValue)) { GasConcentrationProbeDataManamement._iDisposeFlag = Const.DISPOSE_FLAG_ZERO; } } }
/// <summary> /// 加载瓦斯浓度探头数据信息 /// </summary> private void loadGasConcentrationProbeDataInfo() { Invoke(new MethodInvoker(delegate { // 修改按钮设为不可用(必须实装) _btnQuery.Text = "查询中..."; _btnQuery.Enabled = false; btnUpdate.Enabled = false; // 删除按钮设为不可用(必须实装) btnDelete.Enabled = false; // 全选/全不选checkbox设为未选中(必须实装) _chkSelAll.Checked = false; _lblNoData.Visible = true; _lblNoData.Text = "查询数据中..."; dataPager1.Enabled = false; })); // 清空HashTabl(必须实装) _htSelIdxs.Clear(); // 删除farpoint明细部(必须实装) // 解决修改、删除某条数据后,重新load的时候,选择列checkbox不恢复成默认(不选择)的BUG // 解决删除全部数据后,再添加一行,报错的BUG Invoke(new MethodInvoker(delegate { if (fpGasConcentrationProbeDataInfo.Sheets[0].Rows.Count != _iRowDetailStartIndex) { fpGasConcentrationProbeDataInfo.Sheets[0].Rows.Remove(_iRowDetailStartIndex, _iRowCount); } else { _iRowCount = 0; } })); var dtTimeStart = _dateTimeStart.Value; var dtTimeEnd = _dateTimeEnd.Value; // 根据探头编号和开始结束时间,获取特定探头和特定时间段内的【瓦斯浓度探头数据】(必须实装) var iRecordCount = GasConcentrationProbeData.SelectAllGasConcentrationProbeDataByProbeIdAndTime(_probeId, dtTimeStart, dtTimeEnd).Length; var iStartIndex = 0; var iEndIndex = 0; Invoke(new MethodInvoker(delegate { if (iRecordCount > 0) { _gbPage.Enabled = true; } else { _gbPage.Enabled = false; } // 调用分页控件初始化方法(必须实装) dataPager1.PageControlInit(iRecordCount); // 获取要检索数据的开始位置和结束位置 (必须实装) iStartIndex = dataPager1.getStartIndex(); iEndIndex = dataPager1.getEndIndex(); })); //// 获取开始位置和结束位置之间的数据(必须实装) //// 说明:如果画面当前显示的件数是10,那么init时开始位置为1,结束位置为10,点击下一页后,开始位置变为11,结束位置变为20 var datas = GasConcentrationProbeData.SlicedSelectAllGasConcentrationProbeDataByProbeIdAndTime( iStartIndex, iEndIndex, _probeId, dtTimeStart, dtTimeEnd); // 当前检索件数(必须实装) var iSelCnt = datas.Length; Invoke(new MethodInvoker(delegate { // 重新设定farpoint显示行数 (必须实装) fpGasConcentrationProbeDataInfo.Sheets[0].Rows.Count = _iRowDetailStartIndex + iSelCnt; })); // 检索件数 > 0 的场合 if (iSelCnt > 0) { // 设置处理标识位 _iDisposeFlag = Const.DISPOSE_FLAG_ONE; // 当前检索件数(必须实装) _iRowCount = iSelCnt; // 循环结果集 for (var i = 0; i < iSelCnt; i++) { var index = 0; // 选择 Invoke(new MethodInvoker(delegate { var objCheckCell = new CheckBoxCellType(); fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, index].CellType = objCheckCell; // 探头数据编号 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].ProbeDataId.ToString(); // 探头编号 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].Probe.ProbeId; // 探头数值 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].ProbeValue.ToString(); // 记录时间 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].RecordTime.ToString("yyyy-MMMM-dd hh:mm:ss"); // 记录类型 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].RecordType; // 探头信息取得 //DataSet dsProbe = ProbeManageBLL.selectProbeManageInfoByProbeId(strProbeId); if (datas[i].Probe != null) { // 探头名称 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].Probe.ProbeName; // 探头类型 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].Probe.ProbeType.ProbeTypeName; // 探头描述 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].Probe.ProbeDescription; // 矿井名称 if (datas[i].Probe.Tunnel != null) { fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].Probe.Tunnel.WorkingFace.MiningArea.Horizontal.Mine.MineName; // 水平 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].Probe.Tunnel.WorkingFace.MiningArea.Horizontal.HorizontalName; // 采区 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].Probe.Tunnel.WorkingFace.MiningArea.MiningAreaName; // 工作面 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].Probe.Tunnel.WorkingFace.WorkingFaceName; // 巷道名称 fpGasConcentrationProbeDataInfo.Sheets[0].Cells[_iRowDetailStartIndex + i, ++index].Text = datas[i].Probe.Tunnel.TunnelName; } } })); } } else { // 显示无数据提示信息 Invoke(new MethodInvoker(delegate { _lblNoData.Text = "提示:无数据!"; _lblNoData.Visible = true; })); } Invoke(new MethodInvoker(delegate { _lblNoData.Visible = false; _lblNoData.Text = "查询数据中..."; _btnQuery.Text = "查询"; _btnQuery.Enabled = true; dataPager1.Enabled = true; })); }