| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- #include "StdAfx.h"
- #include "CellDataCompare.h"
- #include "IvrFlow.h"
- #include "FlowDataProvider.h"
- IMPLEMENT_CELL_AUTOCREATE(CCellDataCompare, CELL_NAME_COMPARE)
- CCellDataCompare::CCellDataCompare(void)
- {
- m_Data1 = "";
- m_Data2 = "";
- m_Data3 = "";
- m_Data1Type = 0;
- m_Data2Type = 0;
- m_Data3Type = 0;
- m_CompareType = 0;
- m_VarType = 0;
- m_TruePos = 0;
- m_FalsePos = 0;
- }
- CCellDataCompare::CCellDataCompare( CCellDataCompare & cellDataCompare ) : CCellBase(cellDataCompare)
- {
- m_Data1 = cellDataCompare.m_Data1;
- m_Data2 = cellDataCompare.m_Data2;
- m_Data3= cellDataCompare.m_Data3;
- m_Data1Type = cellDataCompare.m_Data1Type;
- m_Data2Type = cellDataCompare.m_Data2Type;
- m_Data3Type = cellDataCompare.m_Data3Type;
- m_CompareType = cellDataCompare.m_CompareType;
- m_VarType = cellDataCompare.m_VarType;
- m_TruePos = cellDataCompare.m_TruePos;
- m_FalsePos = cellDataCompare.m_FalsePos;
- }
- CCellDataCompare::~CCellDataCompare(void)
- {
- }
- /*****************************************************************
- **【函数名称】 Operate
- **【函数功能】 节点执行函数
- **【参数】
- **【返回值】 下一个节点编号
- ****************************************************************/
- int CCellDataCompare::operate( void )
- {
- if(m_pIvrFlow == NULL)
- return CELL_OP_ERROR;
- CString Info;
- _getCellInfo(Info);
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 开始执行[%s]"), Info);
- //运算数1为变量时,查找相应值
- if( m_Data1Type == CELL_DATA_VAR )
- {
- if( !m_pIvrFlow->findVarValue( m_Data1, m_Data1 ) )
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 运算数1[%s]未找到相应值"), Info, m_Data1);
- return m_FalsePos;
- }
- }
- //运算数2为变量时,查找相应值
- if( m_Data2Type == CELL_DATA_VAR )
- {
- if( !m_pIvrFlow->findVarValue( m_Data2, m_Data2 ) )
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 运算数2[%s]未找到相应值"), Info, m_Data2);
- return m_FalsePos;
- }
- }
- //比价区间时且运算数3为变量时,查找相应值
- if( m_Data3Type == CELL_DATA_VAR && m_CompareType == DATA_COMPARE_IN )
- {
- if( !m_pIvrFlow->findVarValue( m_Data3, m_Data3 ) )
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 运算数3[%s]未找到相应值"), Info, m_Data3);
- return m_FalsePos;
- }
- }
- bool CompareResult = false;
- switch(m_CompareType)
- {
- case DATA_COMPARE_E:
- {
- if(m_VarType == VAR_TYPE_INT)
- {
- int IntCompare1 = atoi( m_Data1 );
- int IntCompare2 = atoi( m_Data2 );
- if(IntCompare1 == IntCompare2)
- CompareResult = TRUE;
- }
- else
- {
- if( m_Data1 == m_Data2 )
- CompareResult = TRUE;
- }
- }
- break;
- case DATA_COMPARE_G:
- {
- if(m_VarType == VAR_TYPE_INT)
- {
- int IntCompare1 = atoi( m_Data1 );
- int IntCompare2 = atoi( m_Data2 );
- if( IntCompare1 > IntCompare2 )
- CompareResult = TRUE;
- }
- else
- {
- if( m_Data1 > m_Data2 )
- CompareResult = TRUE;
- }
- }
- break;
- case DATA_COMPARE_GE:
- {
- if(m_VarType == VAR_TYPE_INT)
- {
- int IntCompare1 = atoi( m_Data1 );
- int IntCompare2 = atoi( m_Data2 );
- if( IntCompare1 >= IntCompare2 )
- CompareResult = TRUE;
- }
- else
- {
- if( m_Data1 >= m_Data2 )
- CompareResult = TRUE;
- }
- }
- break;
- case DATA_COMPARE_L:
- {
- if(m_VarType == VAR_TYPE_INT)
- {
- int IntCompare1 = atoi( m_Data1 );
- int IntCompare2 = atoi( m_Data2 );
- if( IntCompare1 < IntCompare2 )
- CompareResult = TRUE;
- }
- else
- {
- if( m_Data1 < m_Data2 )
- CompareResult = TRUE;
- }
- }
- break;
- case DATA_COMPARE_LE:
- {
- if(m_VarType == VAR_TYPE_INT)
- {
- int IntCompare1 = atoi( m_Data1 );
- int IntCompare2 = atoi( m_Data2 );
- if( IntCompare1 <= IntCompare2 )
- CompareResult = TRUE;
- }
- else
- {
- if( m_Data1 <= m_Data2 )
- CompareResult = TRUE;
- }
- }
- break;
- case DATA_COMPARE_IN:
- {
- if(m_VarType == VAR_TYPE_INT)
- {
- int IntCompare1 = atoi( m_Data1 );
- int IntCompare2 = atoi( m_Data2 );
- int IntCompare3 = atoi( m_Data3 );
- if( (IntCompare1 > IntCompare2) && (IntCompare1 < IntCompare3) )
- CompareResult = TRUE;
- }
- else
- {
- if( (m_Data1 > m_Data2) && (m_Data1 < m_Data3))
- CompareResult = TRUE;
- }
- }
- break;
- default:
- ASSERT(FALSE);
- break;
- }
- if (CompareResult)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 执行[%s]结束, 比较结果为真"), Info);
- return m_TruePos;
- }
- else
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 执行[%s]结束, 比较结果为假"), Info);
- return m_FalsePos;
- }
- }
- /*****************************************************************
- **【函数名称】 copy
- **【函数功能】 拷贝自身
- **【参数】
- **【返回值】 拷贝副本
- ****************************************************************/
- CCellBase * CCellDataCompare::copy( void )
- {
- CCellBase * pCellBase = new CCellDataCompare(*this);
- return pCellBase;
- }
- /*****************************************************************
- **【函数名称】 fillData
- **【函数功能】 节点解析,填充数据
- **【参数】 Provider:数据提供器
- **【返回值】 成功true,失败false
- ****************************************************************/
- bool CCellDataCompare::fillData( IFlowDataProvider& Provider )
- {
- CString Data;
- do
- {
- if(!Provider.getData(CELL_ATTRIBUTE_POS, Data))
- {
- Data = _T("节点号");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_Pos);
- if(m_Pos < 1)
- {
- Data = _T("节点号");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_DATA1_TYPE, Data))
- {
- Data = _T("操作数1类型");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_Data1Type);
- if(m_Data1Type != CELL_DATA_VAL && m_Data1Type != CELL_DATA_VAR)
- {
- Data = _T("操作数1类型");
- break;
- }
- }
-
- if(!Provider.getData(CELL_ATTRIBUTE_DATA2_TYPE, Data))
- {
- Data = _T("操作数2类型");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_Data2Type);
- if(m_Data2Type != CELL_DATA_VAL && m_Data2Type != CELL_DATA_VAR)
- {
- Data = _T("操作数2类型");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_DATA3_TYPE, Data))
- {
- Data = _T("操作数3类型");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_Data3Type);
- if(m_Data3Type != CELL_DATA_VAL && m_Data3Type != CELL_DATA_VAR)
- {
- Data = _T("操作数3类型");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_DATA1, m_Data1))
- {
- Data = _T("操作数1");
- break;
- }
- if(!Provider.getData(CELL_ATTRIBUTE_DATA2, m_Data2))
- {
- Data = _T("操作数2");
- break;
- }
- if(!Provider.getData(CELL_ATTRIBUTE_DATA3, m_Data3))
- {
- Data = _T("操作数3");
- break;
- }
- if(!Provider.getData(CELL_ATTRIBUTE_VAR_TYPE, Data))
- {
- Data = _T("变量类型");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_VarType);
- if(m_VarType != VAR_TYPE_INT && m_VarType != VAR_TYPE_STRING)
- {
- Data = _T("变量类型");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_COMPARE_TYPE, Data))
- {
- Data = _T("比较类型");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_CompareType);
- if(m_CompareType < DATA_COMPARE_E && m_CompareType > DATA_COMPARE_IN)
- {
- Data = _T("比较类型");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_TRUE_POS, Data))
- {
- Data = _T("比较为真跳转节点");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_TruePos);
- if(m_TruePos < 0)
- {
- Data = _T("比较为真跳转节点");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_FALSE_POS, Data))
- {
- Data = _T("比较为假跳转节点");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_FalsePos);
- if(m_FalsePos < 0)
- {
- Data = _T("比较为假跳转节点");
- break;
- }
- }
- Provider.getData(CELL_ATTRIBUTE_NOTE, m_Note);
- return true;
- } while (false);
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{Cell}: 节点[%s]解析失败, '%s'错误"), CELL_NAME_COMPARE, Data);
- return false;
- }
|