#include #include #include #include #include #include #include #include #include #include //#include #include "T_LOV_JUDGE.h" #include #include #include #include using namespace log4cplus; using namespace std; extern iDA::Connection cn; DataAlarm::DataAlarm() { LOG d("DataAlarm::DataAlarm"); mqp_proxy = ProxyMag::GetAppICEPrx("baosight/zmqp"); mp_restapi = new RestAPI(); pt_pdo = new CMemTable("TRKPDO",PDO_LIST_MAX); mp_coil = new CMemCoil(); mp_trk = new CMemTrk(); AlarmMsg = new T_ALARM_MSG(); db_order = " ORDER BY id DESC"; p_tele = new BinaryTele(2000, "T_LOV_FDAAITEM"); ConfigMag configmag("CRGS"); string server = configmag.ReadProperty("activemq", "server"); judge.clear(); isBA(0); d.Info() << "END" << std::endl; } DataAlarm::~DataAlarm() { LOG d("DataAlarm::~DataAlarm"); delete pt_pdo; delete mp_restapi; delete mp_coil; delete mp_trk; delete AlarmMsg; delete p_tele; } string DataAlarm::isBA(int zone) { LOG d("DataAlarm::SteelGrade"); string sql = "select * from T_LOV_JUDGE"; iDA::Command cmd; cmd.SetConnection(&cn); //d.Info() << sql << endl; cmd.SetCommandText(sql); cmd.Execute(); string setstr; T_LOV_JUDGE::STR_T_LOV_JUDGE singlejudge; while (cmd.FetchNext()) { strcpy(singlejudge.CheckItem, cmd.Field("CheckItem").AsString().c_str()); //d.Info() << singlejudge.CheckItem << endl; strcpy(singlejudge.CheckMode, cmd.Field("CheckMode").AsString().c_str()); strcpy(singlejudge.checkItemNameMax, cmd.Field("checkItemNameMax").AsString().c_str()); strcpy(singlejudge.checkItemNameMin, cmd.Field("checkItemNameMin").AsString().c_str()); strcpy(singlejudge.AlarmMessage, cmd.Field("AlarmMessage").AsString().c_str()); strcpy(singlejudge.AlarmTerm, cmd.Field("AlarmTerm").AsString().c_str()); strcpy(singlejudge.AlarmPos, cmd.Field("AlarmPos").AsString().c_str()); singlejudge.LowerLimit = cmd.Field("LowerLimit").AsDouble(); singlejudge.UpperLimit = cmd.Field("UpperLimit").AsDouble(); singlejudge.ZoneName = cmd.Field("ZoneName").AsDouble(); for (int i = 0; i < 5; i++) { string name = "BoolQueryName_IND" + to_string(i); strcpy(singlejudge.BoolQueryName[i], cmd.Field(name.c_str()).AsString().c_str()); string source = "BoolQuerySource_IND" + to_string(i); strcpy(singlejudge.BoolQuerySource[i], cmd.Field(source.c_str()).AsString().c_str()); string valuemax = "DigitalQueryValueMax_IND" + to_string(i); string valuemin = "DigitalQueryValueMin_IND" + to_string(i); strcpy(singlejudge.DigitalQueryValueMax[i], cmd.Field(valuemax.c_str()).AsString().c_str()); strcpy(singlejudge.DigitalQueryValueMin[i], cmd.Field(valuemin.c_str()).AsString().c_str()); } judge.push_back(singlejudge); } d.Info() << "END" << std::endl; } string DataAlarm::SteelGrade(int zone) { } string DataAlarm::WorkDeal(int zone) { } int DataAlarm::baseAlarm() { LOG d("DataAlarm::baseAlarm"); Json::Value jsonData; //中央段速度为0,停止报警 float MainSpd=getItemValue("speed_tm_ext"); if(MainSpd==0) return 0; for (int i = 0; i < judge.size(); i++) { Json::Value singledata; string item = string(judge[i].CheckItem); string ItemSet = string(judge[i].BoolQueryName[0]); // d.Info()<<"报警项数据"< upvalue) { singledata["level"] = 1; if(value < lowvalue) { os<<"低于下限--实时值: "< upvalue) { os<<"高于上限--实时值: "<entId) + "'"; // iDA::Command cmd; // cmd.SetConnection(&cn); // cmd.SetCommandText(sql); // cmd.Execute(); string ItemSet = string(judge[i].BoolQueryName[0]); valueset =getItemValue(ItemSet); double minset = 0, maxset = 0; singledata["minvalue"] = valueset + lowvalue; singledata["maxvalue"] = valueset + upvalue; //d.Info()<<"item: "< valueset + upvalue) { singledata["level"] = 1; if(value < valueset + lowvalue) { os<<"低于下限--实时值: "< valueset + upvalue) { os<<"高于上限--实时值: "<openSetDB(db_where.c_str(), db_order.c_str()); if (dbMsg != NULL) { d.Error() << "Can not open T_AlARM_MSG dbMsg= " << dbMsg << endl; AlarmMsg->closeSetDB(); } else { int seq = 1; dbMsg = AlarmMsg->getSetDB(); if (dbMsg == NULL) { seq = AlarmMsg->Id() + 1; } else { d.Error() << "填入序号报错, dbMsg=" << dbMsg << endl; } string coild = (*mp_trk)(judge[i].ZoneName)->entId; if(coild == "") continue; // d.Info()<<"ZoneName: "<openSetDB(db_where.c_str(), db_order.c_str()); if (dbMsg != NULL) { d.Error() << "Can not open T_AlARM_MSG dbMsg= " << dbMsg << endl; AlarmMsg->closeSetDB(); } else { dbMsg = AlarmMsg->getSetDB(); if(dbMsg != NULL) { d.Info()<<"dbmsg: "<Time()); time_t now = time(0); //d.Debug()<<"now:"< 60*4 ) { AlarmMsg->initInsertKeys(seq); AlarmMsg->set_ZoneNo(judge[i].ZoneName); AlarmMsg->set_Text(judge[i].AlarmMessage); AlarmMsg->set_msg_item(judge[i].AlarmTerm); AlarmMsg->set_ZoneName(judge[i].AlarmPos); AlarmMsg->set_CoilId((*mp_trk)(judge[i].ZoneName)->entId); AlarmMsg->set_Spare1(judge[i].CheckItem); AlarmMsg->set_Time((char *)TCMTime::Now().ToString().c_str()); AlarmMsg->set_wplenstart((*mp_trk)(judge[i].ZoneName)->wplen/1000); AlarmMsg->set_wplenstop((*mp_trk)(judge[i].ZoneName)->wplen/1000); dbMsg = AlarmMsg->insertDB(); if (dbMsg != NULL) { d.Error() << "Insert T_AlARM_MSG failed, dbMsg=" << dbMsg << endl; AlarmMsg->closeSetDB(); AlarmMsg->dbRollback(); } else { AlarmMsg->closeSetDB(); AlarmMsg->dbCommit(); } } else { AlarmMsg->closeSetDB(); } } } } //报警项数据库处理结束 } stringstream strs; strs << jsonData; // d.Debug() << strs.str() << std::endl; this->Proxy(EV_MQP_RULEMSG,"baosight/zmqp",strs.str().c_str(),strs.str().length()); } double DataAlarm::getItemValue(string item) { LOG d("DataAlarm::getItemValue"); p_tele->ReBuild(2000); int index = p_tele->GetItemIndex(item); // d.Info()<<"index: "< tele(StringHelper::ToString(2000), 2); FDA_DATA *mp_data = tele(); double value = (*mp_data)[index]; //d.Debug() << "Item = " << item << ", value = " << value << std::endl; return value; } else { d.Debug()<<"Don't find item"<SendDataShort(eventNo,sendData,sendData.size()); d.Info("send to %s ok",proxyName.c_str()); } catch( ::Ice::LocalException& e) { d.Error()<< "SendSeq error:"<