MiddleWares_YiHe 郑州颐和医院随访系统中间件

CellStringOp.cpp 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. #include "StdAfx.h"
  2. #include "CellStringOp.h"
  3. #include "IvrFlow.h"
  4. #include "FlowDataProvider.h"
  5. IMPLEMENT_CELL_AUTOCREATE(CCellStringOp, CELL_NAME_STRING_OP)
  6. CCellStringOp::CCellStringOp(void)
  7. {
  8. m_OpType = 0;
  9. m_InterceptIdx = 0;
  10. m_InterceptLen = 0;
  11. m_NextPos = 0;
  12. m_MatchTruePos = 0;
  13. m_MatchFalsePos = 0;
  14. m_OpVarName = "";
  15. m_ResultVarName = "";
  16. m_ReplaceVarName = "";
  17. m_ReplaceAsVarName = "";
  18. m_MatchVarName = "";
  19. m_AppendVarName = "";
  20. }
  21. CCellStringOp::CCellStringOp( CCellStringOp & CellStringOp ) : CCellBase(CellStringOp)
  22. {
  23. m_OpType = CellStringOp.m_OpType;
  24. m_InterceptIdx = CellStringOp.m_InterceptIdx;
  25. m_InterceptLen = CellStringOp.m_InterceptLen;
  26. m_NextPos = CellStringOp.m_NextPos;
  27. m_MatchTruePos = CellStringOp.m_MatchTruePos;
  28. m_MatchFalsePos = CellStringOp.m_MatchFalsePos;
  29. m_OpVarName = CellStringOp.m_OpVarName;
  30. m_ResultVarName = CellStringOp.m_ResultVarName;
  31. m_ReplaceVarName = CellStringOp.m_ReplaceVarName;
  32. m_ReplaceAsVarName = CellStringOp.m_ReplaceAsVarName;
  33. m_MatchVarName = CellStringOp.m_MatchVarName;
  34. m_AppendVarName = CellStringOp.m_AppendVarName;
  35. }
  36. CCellStringOp::~CCellStringOp(void)
  37. {
  38. }
  39. /*****************************************************************
  40. **【函数名称】 operate
  41. **【函数功能】 节点执行函数
  42. **【参数】
  43. **【返回值】 下一个节点编号
  44. ****************************************************************/
  45. int CCellStringOp::operate( void )
  46. {
  47. if(m_pIvrFlow == NULL)
  48. return CELL_OP_ERROR;
  49. CString Info;
  50. _getCellInfo(Info);
  51. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 开始执行[%s]"), Info);
  52. CString strSourceString;
  53. if( !m_pIvrFlow->findVarValue( m_OpVarName, strSourceString ) )
  54. {
  55. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 操作字符串[%s]未找到相应值"), Info, m_OpVarName);
  56. return CELL_OP_ERROR;
  57. }
  58. switch(m_OpType)
  59. {
  60. case STRING_OP_TRIM:
  61. {
  62. strSourceString.Trim();
  63. m_pIvrFlow->addVar(m_ResultVarName, strSourceString);
  64. return m_NextPos;
  65. }
  66. break;
  67. case STRING_OP_SUB:
  68. {
  69. CString strTmp = strSourceString.Mid( m_InterceptIdx, m_InterceptLen );
  70. m_pIvrFlow->addVar(m_ResultVarName, strTmp);
  71. return m_NextPos;
  72. }
  73. break;
  74. case STRING_OP_REPLACE:
  75. {
  76. CString strSourceReplace = "";
  77. CString strDestReplace = "";
  78. if( !m_pIvrFlow->findVarValue( m_ReplaceVarName, strSourceReplace ) )
  79. {
  80. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 被替换字符串[%s]未找到相应值"), Info, m_ReplaceVarName);
  81. return CELL_OP_ERROR;
  82. }
  83. if( !m_pIvrFlow->findVarValue( m_ReplaceAsVarName, strDestReplace ) )
  84. {
  85. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 替换为字符串[%s]未找到相应值"), Info, m_ReplaceAsVarName);
  86. return CELL_OP_ERROR;
  87. }
  88. strSourceString.Replace( strSourceReplace, strDestReplace );
  89. m_pIvrFlow->addVar( m_ResultVarName, strSourceString );
  90. return m_NextPos;
  91. }
  92. break;
  93. case STRING_OP_MATCH:
  94. {
  95. CString strMatch;
  96. if( !m_pIvrFlow->findVarValue( m_MatchVarName, strMatch ) )
  97. {
  98. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 匹配字符串[%s]未找到相应值"), Info, m_MatchVarName);
  99. return CELL_OP_ERROR;
  100. }
  101. if( strMatch == strSourceString )
  102. return m_MatchTruePos;
  103. else
  104. return m_MatchFalsePos;
  105. }
  106. break;
  107. case STRING_OP_APPEND:
  108. {
  109. CString strDestString;
  110. if( !m_pIvrFlow->findVarValue( m_AppendVarName, strDestString ) )
  111. {
  112. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 合并字符串[%s]未找到相应值"), Info, m_AppendVarName);
  113. return CELL_OP_ERROR;
  114. }
  115. strSourceString += strDestString;
  116. m_pIvrFlow->addVar( m_ResultVarName, strSourceString );
  117. return m_NextPos;
  118. }
  119. break;
  120. default:
  121. ASSERT(FALSE);
  122. }
  123. return CELL_OP_ERROR;
  124. }
  125. /*****************************************************************
  126. **【函数名称】 copy
  127. **【函数功能】 拷贝自身
  128. **【参数】
  129. **【返回值】 拷贝副本
  130. ****************************************************************/
  131. CCellBase * CCellStringOp::copy( void )
  132. {
  133. CCellBase * pCellBase = new CCellStringOp(*this);
  134. return pCellBase;
  135. }
  136. /*****************************************************************
  137. **【函数名称】 fillData
  138. **【函数功能】 节点解析,填充数据
  139. **【参数】 Provider:数据提供器
  140. **【返回值】 成功true,失败false
  141. ****************************************************************/
  142. bool CCellStringOp::fillData( IFlowDataProvider& Provider )
  143. {
  144. CString Data;
  145. do
  146. {
  147. if(!Provider.getData(CELL_ATTRIBUTE_POS, Data))
  148. {
  149. Data = _T("节点号");
  150. break;
  151. }
  152. else
  153. {
  154. sscanf_s(Data, _T("%d"), &m_Pos);
  155. if(m_Pos < 1)
  156. {
  157. Data = _T("节点号");
  158. break;
  159. }
  160. }
  161. if(!Provider.getData(CELL_ATTRIBUTE_OPERATE_TYPE, Data))
  162. {
  163. Data = _T("操作类型");
  164. break;
  165. }
  166. else
  167. {
  168. sscanf_s(Data, _T("%d"), &m_OpType);
  169. if(m_OpType < STRING_OP_TRIM || m_OpType > STRING_OP_APPEND)
  170. {
  171. Data = _T("操作类型");
  172. break;
  173. }
  174. }
  175. if(!Provider.getData(CELL_ATTRIBUTE_OPERATE_VAR, m_OpVarName))
  176. {
  177. Data = _T("操作字符串");
  178. break;
  179. }
  180. if(!Provider.getData(CELL_ATTRIBUTE_RESULT_VAR, m_ResultVarName))
  181. {
  182. Data = _T("存储结果变量");
  183. break;
  184. }
  185. if(!Provider.getData(CELL_ATTRIBUTE_REPLACE_VAR, m_ReplaceVarName))
  186. {
  187. Data = _T("被替换字符串变量");
  188. break;
  189. }
  190. if(!Provider.getData(CELL_ATTRIBUTE_REP_AS_VAR, m_ReplaceAsVarName))
  191. {
  192. Data = _T("替换为字符串变量");
  193. break;
  194. }
  195. if(!Provider.getData(CELL_ATTRIBUTE_MATCH_VAR, m_MatchVarName))
  196. {
  197. Data = _T("匹配字符串变量");
  198. break;
  199. }
  200. if(!Provider.getData(CELL_ATTRIBUTE_APPEND_VAR, m_AppendVarName))
  201. {
  202. Data = _T("合并字符串变量");
  203. break;
  204. }
  205. if(!Provider.getData(CELL_ATTRIBUTE_INTERCEPT_INDEX, Data))
  206. {
  207. Data = _T("截取开始索引");
  208. break;
  209. }
  210. else
  211. {
  212. sscanf_s(Data, _T("%d"), &m_InterceptIdx);
  213. if(m_OpType == STRING_OP_SUB && m_InterceptIdx < 0)
  214. {
  215. Data = _T("截取开始索引");
  216. break;
  217. }
  218. }
  219. if(!Provider.getData(CELL_ATTRIBUTE_INTERCEPT_LEN, Data))
  220. {
  221. Data = _T("截取长度");
  222. break;
  223. }
  224. else
  225. {
  226. sscanf_s(Data, _T("%d"), &m_InterceptLen);
  227. if(m_OpType == STRING_OP_SUB && m_InterceptLen < 1)
  228. {
  229. Data = _T("截取长度");
  230. break;
  231. }
  232. }
  233. if(!Provider.getData(CELL_ATTRIBUTE_NEXT, Data))
  234. {
  235. Data = _T("跳转节点");
  236. break;
  237. }
  238. else
  239. {
  240. sscanf_s(Data, _T("%d"), &m_NextPos);
  241. if(m_NextPos < 1)
  242. {
  243. Data = _T("跳转节点");
  244. break;
  245. }
  246. }
  247. if(!Provider.getData(CELL_ATTRIBUTE_TRUE_POS, Data))
  248. {
  249. Data = _T("匹配为真跳转节点");
  250. break;
  251. }
  252. else
  253. {
  254. sscanf_s(Data, _T("%d"), &m_MatchTruePos);
  255. if(m_OpType == STRING_OP_MATCH && m_MatchTruePos < 1)
  256. {
  257. Data = _T("匹配为真跳转节点");
  258. break;
  259. }
  260. }
  261. if(!Provider.getData(CELL_ATTRIBUTE_FALSE_POS, Data))
  262. {
  263. Data = _T("匹配为假跳转节点");
  264. break;
  265. }
  266. else
  267. {
  268. sscanf_s(Data, _T("%d"), &m_MatchFalsePos);
  269. if(m_OpType == STRING_OP_MATCH && m_MatchFalsePos < 1)
  270. {
  271. Data = _T("匹配为假跳转节点");
  272. break;
  273. }
  274. }
  275. Provider.getData(CELL_ATTRIBUTE_NOTE, m_Note);
  276. return true;
  277. } while (false);
  278. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{Cell}: 节点[%s]解析失败, '%s'错误"), CELL_NAME_STRING_OP, Data);
  279. return false;
  280. }