#include #include #include #include #include #include /*****************************************/ extern std::map glob_items; int AlgCarLimit::init() { LOG d("AlgCarLimit::init", AUTO_CATCH_PID); int ret = 0; try { // p_tele->ReBuild(event_no_of_item[m_tags[0]]); // p_btel->ReBuild(1010); // change v2 // mp_timeset = new // CMemTable("T_LOV_TAB1", 999); } catch (const std::exception &e) { d.Error() << mix_cc::get_nested_exception(e) << std::endl; ret = -1; } // CMemTable // tele(std::to_string(event_no_of_item[m_tags[0]]), 1); // (*p_tele).ReBuild(event_no_of_item[m_tags[0]], *tele()); pre_limit_pos = glob_items[m_tags[2]].value; return ret; } AlgCarLimit::AlgCarLimit(const string name, const Json::Value rulejson, const string ruleId) : AlgBase(name, rulejson, ruleId) { this->init(); } AlgCarLimit::~AlgCarLimit() {} int AlgCarLimit::calculate(string &outjson) { LOG d("AlgCarLimit::calculate", AUTO_CATCH_PID); outjson = ""; int sta_pos[2] = {4094, 4500}; int ret = 0; try { //"小车走形位置实际值", //"小车速度", //"限位位置" int itmp[3]; // for(int i = 0;i<3;i++) // { // if(i == 0 || event_no_of_item[m_tags[i]] != event_no_of_item[m_tags[i-1]]) // { // CMemTable // tele(std::to_string(event_no_of_item[m_tags[0]]), 1); // (*p_tele).ReBuild(event_no_of_item[m_tags[0]], *tele()); // itmp[i]= (*p_tele)[m_tags[i]]; // } // itmp[i]= (*p_tele)[m_tags[i]]; // } m_act_pos = glob_items[m_tags[0]].value; m_speed = glob_items[m_tags[1]].value; m_limit_pos = glob_items[m_tags[2]].value; HD3TimeRegion timeRegion; timeRegion.left.nSec = time(0); timeRegion.right.nSec = time(0); if (m_speed > 0 && (pre_limit_pos == 0 && m_limit_pos == 1)) { d.Debug() << "m_act_pos:" << m_act_pos << " m_speed:" << m_speed << " m_limit_pos:" << endl; if (abs(m_act_pos - sta_pos[0]) > m_json_param["limt_alarm"]["value"][1].asDouble()) { string msg = rule_name_ + "::" + m_json_param["limt_alarm"]["name"][1].asString() + ":" + m_json_param["limt_alarm"]["content"][1].asString() + "统计,实际[" + std::to_string(sta_pos[0]) + "," + std::to_string(m_act_pos) + "]"; // d.Debug() << "|MSG|" << msg << endl; outjson = this->build_alarm_info(MsgLevel::WARN, rule_id_, rule_name_, "CAR_LIMIT", msg, timeRegion); this->submitDataBase(m_act_pos); } } else if (m_speed < 0 && (pre_limit_pos == 0 && m_limit_pos == 1)) { d.Debug() << "m_act_pos:" << m_act_pos << " m_speed:" << m_speed << " m_limit_pos:" << endl; if (abs(m_act_pos - sta_pos[0]) > m_json_param["limit_error"]["value"][1].asDouble()) { string msg = rule_name_ + "::" + m_json_param["limit_error"]["name"][1].asString() + ":" + m_json_param["limit_error"]["content"][1].asString() + "统计,实际[" + std::to_string(sta_pos[0]) + "," + std::to_string(m_act_pos) + "]"; // d.Debug() << "|MSG|" << msg << endl; outjson = this->build_alarm_info(MsgLevel::WARN, rule_id_, rule_name_, "CAR_LIMIT", msg, timeRegion); this->submitDataBase(m_act_pos); } } pre_limit_pos = m_limit_pos; } catch (const std::exception &e) { d.Error() << mix_cc::get_nested_exception(e) << std::endl; ret = -1; } return ret; } int AlgCarLimit::submitDataBase(long long actpos) { LOG d("AlgCarLimit::submitDataBase", AUTO_CATCH_PID); try { short direction = 1; if (m_speed < 0) { direction = -1; } char cBuffer[16] = ""; time_t t; time(&t); strftime(cBuffer, sizeof(cBuffer), "%Y%m%d%H%M%S", localtime(&t)); T_LEN_FEEDBACK lfbDB; lfbDB.initInsertKeys(cBuffer, this->m_tags[2].c_str(), direction); lfbDB.set_chinese( this->m_json_param["limit_error"]["content"][1].asCString()); lfbDB.set_interval(actpos); lfbDB.set_flag(1); lfbDB.insertDB(); lfbDB.dbCommit(); } catch (const std::exception &e) { d.Error() << mix_cc::get_nested_exception(e) << std::endl; } return 0; }