private bool IsAlarm(PumpAlarmParam alarmParam) { if (!alarmParam.IsOkay) { return(false); } DateTime lastTime; DateTime startTime; DateTime endtime; try { // 截取出时间部分,转成当天时间比较 var time = DataUtil.ToDateTime(alarmParam.lastTime); lastTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, time.Hour, time.Minute, time.Second); startTime = Convert.ToDateTime(alarmParam._StartTime); endtime = Convert.ToDateTime(alarmParam._EndTime); } catch (Exception e) { TraceManagerForPumpAlarm.AppendErrMsg(string.Format("报警参数表ID:{0} 报警时间点设置错误", e.Message)); return(false); } if (DateTime.Compare(lastTime, startTime) >= 0 && DateTime.Compare(lastTime, endtime) <= 0) // 时间判断 { if (alarmParam._FType == "硬件报警") { if (alarmParam.value == alarmParam._Standard) { return(true); } else { return(false); } } else if (alarmParam._FType == "阈值报警") { // 上阈值判断 if (alarmParam._Standardlev == 1 && alarmParam.value > alarmParam._Standard) { return(true); } // 下阈值判断 if (alarmParam._Standardlev == 0 && alarmParam.value < alarmParam._Standard) { return(true); } } } return(false); }
private void RunPumpAlarm() { System.Diagnostics.Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 #region 查询机组实时表 string sqlPumpRealData = @"select t1.* from PumpRealData t1,Pump t2, PumpJZ t3 where t2.ID=t3.PumpId and (t2.是否删除=0 or t2.是否删除 is null) and (t3.是否删除=0 or t3.是否删除 is null) and t1.BASEID= CONVERT(varchar(50), t3.ID);"; DataTable dtRealData = DBUtil.ExecuteDataTable(sqlPumpRealData, out string errMsg); if (!string.IsNullOrWhiteSpace(errMsg)) { TraceManagerForPumpAlarm.AppendErrMsg("查询二供实时数据失败:" + errMsg); return; } #endregion #region 查询报警参数表 string sqlPumpAlarmParam = @"select t1.* from PumpAlarmParam t1,Pump t2, PumpJZ t3 where t2.ID=t3.PumpId and (t2.是否删除=0 or t2.是否删除 is null) and (t3.是否删除=0 or t3.是否删除 is null) and t1.是否启用=1 and t1.PumpJZID= CONVERT(varchar(50), t3.ID);"; DataTable dtAlarmParam = DBUtil.ExecuteDataTable(sqlPumpAlarmParam, out errMsg); if (!string.IsNullOrWhiteSpace(errMsg)) { TraceManagerForPumpAlarm.AppendErrMsg("查询二供报警参数失败:" + errMsg); return; } List <PumpAlarmParam> alarmParams = new List <PumpAlarmParam>(); foreach (DataRow dr in dtAlarmParam.Rows) { PumpAlarmParam pumpAlarmParam = new PumpAlarmParam() { _ID = DataUtil.ToInt(dr["ID"]), _FCreateDate = DataUtil.ToDateString(dr["FCreateDate"]).Trim(), _StartTime = DataUtil.ToString(dr["StartTime"]).Trim(), _EndTime = DataUtil.ToString(dr["EndTime"]).Trim(), _PumpJZID = DataUtil.ToString(dr["PumpJZID"]).Trim(), _Standard = DataUtil.ToDouble(dr["Standard"]), _Standardlev = DataUtil.ToDouble(dr["Standardlev"]), _IsUsed = DataUtil.ToInt(dr["是否启用"]), _FKey = DataUtil.ToString(dr["FKey"]).Trim(), _FType = DataUtil.ToString(dr["FType"]).Trim(), _Unit = DataUtil.ToString(dr["Unit"]).Trim(), _FMsg = DataUtil.ToString(dr["FMsg"]).Trim(), _FLev = DataUtil.ToInt(dr["FLev"]) }; alarmParams.Add(pumpAlarmParam); } #endregion #region 查询实时报警表 string sqlPumpAlarmTimely = @"select * from PumpAlarmTimely where AlarmOrWarn=1"; DataTable dtAlarmTimely = DBUtil.ExecuteDataTable(sqlPumpAlarmTimely, out errMsg); if (!string.IsNullOrWhiteSpace(errMsg)) { TraceManagerForPumpAlarm.AppendErrMsg("查询二供实时报警失败:" + errMsg); return; } List <PumpAlarmTimely> alarmTimelys = new List <PumpAlarmTimely>(); foreach (DataRow dr in dtAlarmTimely.Rows) { PumpAlarmTimely alarmTimely = new PumpAlarmTimely() { _ID = DataUtil.ToInt(dr["ID"]), _PumpJZID = DataUtil.ToString(dr["PumpJZID"]).Trim(), _ParamID = DataUtil.ToInt(dr["ParamID"]), _FStatus = DataUtil.ToInt(dr["FStatus"]), _FIsPhone = DataUtil.ToInt(dr["FIsPhone"]), _BeginAlarmTime = DataUtil.ToDateString(dr["BeginAlarmTime"]).Trim(), _UpdateAlarmTime = DataUtil.ToDateString(dr["UpdateAlarmTime"]).Trim(), _AlarmOrWarn = DataUtil.ToInt(dr["AlarmOrWarn"]), _Tips = DataUtil.ToString(dr["Tips"]).Trim(), _Fvalue = DataUtil.ToString(dr["Fvalue"]).Trim() }; alarmTimelys.Add(alarmTimely); } #endregion #region 执行报警维护SQL GetRealAlarmValues(dtRealData, ref alarmParams); // 得到报警参数里面的值 string sql = GetHisAlarmSQL(alarmParams, alarmTimelys); string errHis = "", errReal = ""; if (!string.IsNullOrWhiteSpace(sql)) { DBUtil.ExecuteNonQuery(sql, out errHis); if (!string.IsNullOrEmpty(errHis)) { TraceManagerForPumpAlarm.AppendErrMsg("更新历史报警信息失败" + errHis); } } sql = GetRealAlarmSQL(alarmParams); if (!string.IsNullOrWhiteSpace(sql)) { DBUtil.ExecuteNonQuery(sql, out errReal); if (!string.IsNullOrEmpty(errReal)) { TraceManagerForPumpAlarm.AppendErrMsg("更新实时报警信息失败" + errReal); } } stopwatch.Stop(); // 停止监视 TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间 double milliseconds = timespan.TotalMilliseconds; // 总毫秒数 if (string.IsNullOrWhiteSpace(errHis) && string.IsNullOrWhiteSpace(errReal)) { TraceManagerForPumpAlarm.AppendDebug("已更新报警信息" + ",耗时:" + milliseconds.ToString() + "毫秒"); } //string sql = GetAlarmHisSQL(alarmParams, alarmTimelys) + GetAlarmRealSQL(alarmParams); //if (string.IsNullOrEmpty(sql)) //{ // TraceManager.AppendErrMsg("未查询到相关报警点信息"); // return; //} //DBUtil.ExecuteNonQuery(sql, out string err); //if (!string.IsNullOrEmpty(err)) // TraceManager.AppendErrMsg("更新报警信息失败" + err); //else // TraceManager.AppendDebug("已更新报警信息"); #endregion }