HM-SPMS/product/src/application/sequence_server/CModuleAlarmCreater.cpp
2025-03-12 14:17:53 +08:00

295 lines
7.7 KiB
C++

#include "pub_utility_api/TimeUtil.h"
#include "pub_logger_api/logger.h"
#include "pub_utility_api/I18N.h"
#include "service/alarm_server_api/AlarmCommonDef.h"
#include "CModuleAlarmCreater.h"
#include "CNodeAction.h"
#include "CNodeSeq.h"
#include "CNodeIterator.h"
CModuleAlarmCreater::CModuleAlarmCreater(int domainId, int appId) :
m_objAlmApi(domainId, appId)
{
if(!m_objAlmApi.resumeThread())
{
LOGERROR("事件处理启动失败");
}
}
CModuleAlarmCreater::~CModuleAlarmCreater()
{
if(!m_objAlmApi.suspendThread())
{
LOGERROR("事件处理关闭失败");
}
}
bool CModuleAlarmCreater::seqCtrl(CNodeSeq& seq,const SHmiOpInfo& op)
{
using namespace iot_idl;
SAppAddAlm objAlarm;
SAlmInfoFromApp* pFromApp = objAlarm.add_alm_info();
BOOST_ASSERT(pFromApp);
createHead(seq, *pFromApp, iot_service::ALM_STAT_OPT_SEQ_CTRL);
createHmiOpKeyWord(op.eResult, *pFromApp);
createSeqKeyWord(seq, *pFromApp);
createActorKeyWord(op.actor, *pFromApp);
bool bRet = m_objAlmApi.addAlarm(objAlarm);
if (!bRet)
{
LOGERROR("顺控人工操作事件写入失败,顺控名:[%s]", seq.description().c_str());
}
afterSleep();
return bRet;
}
bool CModuleAlarmCreater::seqCtrl(CNodeAction& action,const SOpResultUi& op)
{
using namespace iot_idl;
SAppAddAlm objAlarm;
SAlmInfoFromApp* pFromApp = objAlarm.add_alm_info();
BOOST_ASSERT(pFromApp);
createHead(action.getNodeSeq(), *pFromApp, iot_service::ALM_STAT_OPT_SEQ_CTRL);
createUiOpKeyWord(op.eResult, *pFromApp);
createSeqKeyWord(action, *pFromApp);
createActionDescKeyWord(action, *pFromApp);
createActorKeyWord(op.actor, *pFromApp);
bool bRet = m_objAlmApi.addAlarm(objAlarm);
if (!bRet)
{
LOGERROR("顺控人工操作事件写入失败,动作名:[%s]", action.description().c_str());
}
afterSleep();
return bRet;
}
bool CModuleAlarmCreater::seqStart(CNodeSeq& seq)
{
using namespace iot_idl;
SAppAddAlm objAlarm;
SAlmInfoFromApp* pFromApp = objAlarm.add_alm_info();
BOOST_ASSERT(pFromApp);
createHead(seq, *pFromApp, iot_service::ALM_STAT_OPT_SEQ_START);
createSeqKeyWord(seq, *pFromApp);
createOpKeyWord(I18N("开始"), *pFromApp);
createActorKeyWord(seq.getSeqActor(), *pFromApp);
bool bRet = m_objAlmApi.addAlarm(objAlarm);
if (!bRet)
{
LOGERROR("顺控开始事件写入失败,顺控名:[%s]", seq.description().c_str());
}
afterSleep();
return bRet;
}
bool CModuleAlarmCreater::seqStop(CNodeSeq& seq)
{
using namespace iot_idl;
SAppAddAlm objAlarm;
SAlmInfoFromApp* pFromApp = objAlarm.add_alm_info();
BOOST_ASSERT(pFromApp);
createHead(seq, *pFromApp, iot_service::ALM_STAT_OPT_SEQ_STOP);
createSeqKeyWord(seq, *pFromApp);
createOpKeyWord(I18N("结束"), *pFromApp);
std::string retStr = seq.getStateStr() + " " + getExecSkipDesc(seq);
createResultKeyWord(retStr, *pFromApp);
createActorKeyWord(seq.getSeqActor(), *pFromApp);
bool bRet = m_objAlmApi.addAlarm(objAlarm);
if (!bRet)
{
LOGERROR("顺控结束事件写入失败,顺控名:[%s]", seq.description().c_str());
}
afterSleep();
return bRet;
}
bool CModuleAlarmCreater::actionExecute(CNodeAction& action)
{
using namespace iot_idl;
CNodeSeq& seq = action.getNodeSeq();
SAppAddAlm objAlarm;
SAlmInfoFromApp* pFromApp = objAlarm.add_alm_info();
BOOST_ASSERT(pFromApp);
createHead(seq, *pFromApp, iot_service::ALM_STAT_OPT_SEQ_ACTION_POINT);
createSeqKeyWord(seq, *pFromApp);
createActionDescKeyWord(action, *pFromApp);
createResultKeyWord(action.getStateStr(), *pFromApp);
createActorKeyWord(seq.getSeqActor(), *pFromApp);
bool bRet = m_objAlmApi.addAlarm(objAlarm);
if (!bRet)
{
LOGERROR("顺控执行事件写入失败,顺控名:[%s],动作名[%s]",
seq.description().c_str(), action.description().c_str());
}
afterSleep();
return bRet;
}
std::string CModuleAlarmCreater::getExecSkipDesc(CNodeSeq &seq)
{
std::string ret;
CNodeFuncIterator iter(seq);
while (iter.hasNext())
{
if(ret != "")
{
break;
}
CNodeFunc& func = iter.getNext();
CNodeActionIterator actionIter(func);
while (actionIter.hasNext())
{
CNodeAction& action = actionIter.getNext();
if(action.getState() == SEQ_SKIP_STATUS)
{
ret = I18N("有部分动作跳过");
break;
}
}
}
return ret;
}
void CModuleAlarmCreater::createHead(
CNodeSeq& seq,
iot_idl::SAlmInfoFromApp& fromApp,
int status)
{
using namespace iot_idl;
fromApp.set_alm_type(iot_service::ALM_TYPE_OPERATE);
fromApp.set_time_stamp(iot_public::getUTCTimeMsec());
fromApp.set_location_id(seq.locationId());
fromApp.set_status(status);
fromApp.set_alm_style(enAlmStyle::AS_EVENT_ONLY);
fromApp.set_region_id(-1);
}
void CModuleAlarmCreater::createSeqKeyWord(CNodeSeq& seq, iot_idl::SAlmInfoFromApp& fromApp)
{
using namespace iot_idl;
SAlmKeyword* pKeyword = NULL;
pKeyword = fromApp.add_alm_keyword();
pKeyword->set_id(iot_service::ALM_KEY_SEQ_CTRL_NAME);
pKeyword->set_value(seq.nodeName());
pKeyword = fromApp.add_alm_keyword();
pKeyword->set_id(iot_service::ALM_KEY_SEQ_CTRL_DESC);
pKeyword->set_value(seq.description());
}
void CModuleAlarmCreater::createSeqKeyWord(CNodeAction &action,
iot_idl::SAlmInfoFromApp &fromApp)
{
using namespace iot_idl;
SAlmKeyword* pKeyword = NULL;
pKeyword = fromApp.add_alm_keyword();
pKeyword->set_id(iot_service::ALM_KEY_SEQ_CTRL_NAME);
pKeyword->set_value(action.nodeName());
pKeyword = fromApp.add_alm_keyword();
pKeyword->set_id(iot_service::ALM_KEY_SEQ_CTRL_DESC);
pKeyword->set_value(action.description());
}
void CModuleAlarmCreater::createHmiOpKeyWord(ESeqCtrl_HmiOpType op,
iot_idl::SAlmInfoFromApp& fromApp)
{
createOpKeyWord(COpResultHmi::getOpStr(op), fromApp);
}
void CModuleAlarmCreater::createUiOpKeyWord(UI_OP_RESULT_TYPE op,
iot_idl::SAlmInfoFromApp& fromApp)
{
createOpKeyWord(COpResultUi::UiOpTypeStr(op), fromApp);
}
void CModuleAlarmCreater::createOpKeyWord(const std::string& op,
iot_idl::SAlmInfoFromApp& fromApp)
{
using namespace iot_idl;
SAlmKeyword* pKeyword = NULL;
pKeyword = fromApp.add_alm_keyword();
pKeyword->set_id(iot_service::ALM_KEY_SEQ_CTRL_ACT);
pKeyword->set_value(op);
}
void CModuleAlarmCreater::createActorKeyWord(const SNodeSeqActor& actor,
iot_idl::SAlmInfoFromApp& fromApp)
{
using namespace iot_idl;
SAlmKeyword* pKeyword = NULL;
pKeyword = fromApp.add_alm_keyword();
pKeyword->set_id(iot_service::ALM_KEY_OPTERATOR);
pKeyword->set_value(actor.user_name);
pKeyword = fromApp.add_alm_keyword();
pKeyword->set_id(iot_service::ALM_KEY_OPT_HOST);
pKeyword->set_value(actor.host_name);
}
void CModuleAlarmCreater::createResultKeyWord(const std::string& state,
iot_idl::SAlmInfoFromApp& fromApp)
{
using namespace iot_idl;
SAlmKeyword* pKeyword = NULL;
pKeyword = fromApp.add_alm_keyword();
pKeyword->set_id(iot_service::ALM_KEY_RTN_RESULT);
pKeyword->set_value(state);
}
void CModuleAlarmCreater::createActionDescKeyWord(CNodeAction& action,
iot_idl::SAlmInfoFromApp& fromApp)
{
using namespace iot_idl;
SAlmKeyword* pKeyword = NULL;
pKeyword = fromApp.add_alm_keyword();
pKeyword->set_id(iot_service::ALM_KEY_SEQ_CTRL_ACT);
pKeyword->set_value(action.description());
}
void CModuleAlarmCreater::afterSleep()
{
using namespace boost::posix_time;
using namespace boost::this_thread;
sleep(millisec(1));
}