eis/eqpalg/.do_not_use/unused_algs/AlgInstantCommon.cpp

133 lines
4.9 KiB
C++

#include <base/BitTool.h>
#include <eqpalg/algs/AlgInstantCommon.h>
#include <utility/StringHelper.h>
extern std::map<std::string, ITEM> glob_items;
int AlgInstantCommon::init() {
LOG d("AlgInstantCommon::init", AUTO_CATCH_PID);
int ret = 0;
try {
// p_tele->ReBuild(event_no_of_item[m_tags[0]]);
// p_btel->ReBuild(1010);
// d.Debug()<<"tags:"<<m_feedback.addr_action<<"
// "<<m_feedback.addr_feedback<<endl;
// mp_timeset = new CMemTable<T_TIME_SET::STR_T_TIME_SET>("T_LOV_TAB1",
// 999); pFDAA = new
// CMemTable<T_LOV_FDAAITEM::STR_T_LOV_FDAAITEM>("T_LOV_FDAAITEM", 1);
} catch (const std::exception &e) {
d.Error() << mix_cc::get_nested_exception(e) << std::endl;
ret = -1;
}
return ret;
}
AlgInstantCommon::AlgInstantCommon(const string name,
const Json::Value rulejson,
const string ruleId)
: AlgBase(name, rulejson, ruleId) {
// CMemTable<MOD_CACHE> mod1("ZONE0",1);
// gb_data = mod1();
this->init();
for (unsigned int i = 0; i < m_tags.size(); i++) {
string tag = "tag" + std::to_string(i + 1);
m_vars[tag] = 0.0;
}
string expdata(m_json_param["action_condition"]["str"][1].asString());
mp_exp = new MathExpression(expdata.c_str(), m_vars);
}
AlgInstantCommon::~AlgInstantCommon() { delete mp_exp; }
int AlgInstantCommon::calculate(string &outjson) {
LOG d("AlgInstantCommon::calculate", AUTO_CATCH_PID);
outjson = "";
int ret = 0;
try {
HD3TimeRegion timeRegion;
timeRegion.left.nSec = time(0);
timeRegion.right.nSec = time(0);
string str_changed = m_json_param["changed_parm"]["list"][1].asString();
string str_unchanged = m_json_param["unchanged_parm"]["list"][1].asString();
string msg = m_json_param["limit_error"]["content"][1].asString() + " ";
for (unsigned int i = 0; i < m_tags.size(); i++) {
string tag = "tag" + std::to_string(i + 1);
m_vars[tag] = glob_items[m_tags[i]].value;
msg += " " + m_tags[i] + " : " +
std::to_string(glob_items[m_tags[i]].value);
// d.Debug() << m_tags[i] << " : " << glob_items[m_tags[i]].value << endl;
}
double ret = mp_exp->evaluate();
// d.Debug() << "exp: " << mp_exp->Disassemble() << " ret: " << ret <<
// endl;
// d.Debug() << " ret: " << ret << endl;
if (fabs(ret - m_json_param["action_condition"]["result"][1].asDouble()) > EPS) {
//表达式条件不满足
return 0;
}
if (!str_changed.empty()) {
for (int i = m_tags.size() - 1; i >= 0; i--) {
string tag = "tag" + std::to_string(i + 1);
string::size_type pos = 0;
if ((pos = str_changed.find(tag)) != string::npos) {
//检测变量
double value = glob_items[m_tags[i]].value;
double valueold = glob_items[m_tags[i]].valueold;
if (fabs(value - valueold) >
m_json_param["changed_parm"]["range"][1].asDouble()) {
string tagname = m_json_param["tags"][tag][2].asString();
msg = msg + " " + tagname + "有变化" +
" new: " + std::to_string(value) +
" old: " + std::to_string(valueold) +
",差值: " +
std::to_string(fabs(value - valueold));
// msg = msg + " " + tagname + "有变化";
} else {
// d.Debug() << rule_name_ << " 数据正常! " << endl;
return 0;
}
// str_changed = str_changed.replace(pos,
// tag.size(),"",AUTO_CATCH_PID);
}
}
}
if (!str_unchanged.empty()) {
for (int i = m_tags.size() - 1; i >= 0; i--) {
string tag = "tag" + std::to_string(i + 1);
string::size_type pos = 0;
if ((pos = str_unchanged.find(tag)) != string::npos) {
//检测变量
double value = glob_items[m_tags[i]].value;
double valueold = glob_items[m_tags[i]].valueold;
if (fabs(fabs(value - valueold) -
m_json_param["unchanged_parm"]["range"][1].asDouble()) <
EPS) {
string tagname = m_json_param["tags"][tag][2].asString();
msg = msg + " " + tagname + "未发生变化! " +
",值为: " + std::to_string(value);
// msg = msg + " " + tagname_str + "有变化";
} else {
// d.Debug() << rule_name_ << " 数据正常! " << endl;
return 0;
}
// str_unchanged = str_unchanged.replace(pos,
// tag.size(),"",AUTO_CATCH_PID);
}
}
}
// d.Debug() << msg << endl;
string tmp = this->build_alarm_info(MsgLevel::ERROR, rule_id_, rule_name_,
"INSTANT_COMMON", msg, timeRegion);
if (!tmp.empty())
outjson = tmp;
} catch (const std::exception &e) {
d.Error() << mix_cc::get_nested_exception(e) << std::endl;
ret = -1;
}
return ret;
}