| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- #include "stdafx.h"
- #include "CellHttpClient.h"
- #include "IvrFlow.h"
- #include "FlowDataProvider.h"
- #include "json.h"
- #include<iostream>
- #include<sstream>
- using namespace std;
- IMPLEMENT_CELL_AUTOCREATE(CCellHttpClient, CELL_NAME_HTTP)
- CCellHttpClient::CCellHttpClient()
- {
- cout << "CCellHttpClient::CCellHttpClient()" << endl;
- m_IsSaveRs = 0;
- m_SuccessPos = 0;
- m_FailPos = 0;
- m_Url = "";
- }
- CCellHttpClient::CCellHttpClient(CCellHttpClient & CellHttpClient) : CCellBase(CellHttpClient)
- {
- cout << "CCellHttpClient::CCellHttpClient(CCellHttpClient & CellHttpClient)" << endl;
- m_IsSaveRs = CellHttpClient.m_IsSaveRs;
- m_SuccessPos = CellHttpClient.m_SuccessPos;
- m_FailPos = CellHttpClient.m_FailPos;
- m_Url = CellHttpClient.m_Url;
- //m_RespVar = CellHttpClient.m_RespVar;
- }
- CCellHttpClient::~CCellHttpClient()
- {
- cout << "CCellHttpClient::~CCellHttpClient()" << endl;
- }
- int CCellHttpClient::operate(void)
- {
- cout << "CCellHttpClient::operate(void)" << endl;
- 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);
- CString t_Url;
- // 替换url语句中的变量
- if (!m_pIvrFlow->replaceVar(m_Url, t_Url))
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 替换URL语句中变量失败, URL = %s"), Info, t_Url);
- return m_FailPos;
- }
- DataSet & RS = m_pIvrFlow->recordSet();
- RS.RemoveAll();
- string t_resp;
- CURLcode curlStatus = CHttpUtil::GetInstance().curl_get_req(t_Url.GetBuffer(0), t_resp);
- if (CURLE_OK != curlStatus)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, Http访问失败, Curl Error = %d"), Info, curlStatus);
- return m_FailPos;
- }
- cout << t_Url << endl;
- cout << t_resp << endl;
- cout << "----------------------------------------------" << endl;
- // t_resp = "{\"item_key1\":\"item_value1\",\"item_key2\":\"item_value2\",\"item_key3\":\"item_value3\",\"item_key4\":132,\"item_key5\":999999999999999}";
- //t_resp = "{ \"state\":\"success\",\"message\" : \"获取最近沟通的坐席\",\"data\" : {\"seatcode\":\"8025\"} }";
- Json::Reader reader;
- Json::Value valRoot;
- std::string strInput;
- strInput = t_resp;
- if (!reader.parse(strInput, valRoot)) // reader将Json字符串解析到root,root将包含Json里所有子元素
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, Json 解析失败 [%s]"), Info, strInput);
- return m_FailPos;
- }
- int nRet = CELL_OP_ERROR; // 执行的返回值
- if (valRoot["state"].asString() != "success")
- {
- nRet = m_FailPos;
- return nRet;
- }
- nRet = m_SuccessPos;
- //Json::Value dataV;
- if (!reader.parse(valRoot["data"].toStyledString(), valRoot)) // reader将Json字符串解析到dataV,dataV将包含Json里所有子元素
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, Json 解析失败 [%s]"), Info, strInput);
- return m_FailPos;
- }
- if (m_IsSaveRs) // 需要记录集
- {
- Json::Value::Members members;
- members = valRoot.getMemberNames(); // 获取所有key的值
- for (Json::Value::Members::iterator iterMember = members.begin(); iterMember != members.end(); iterMember++) // 遍历每个key
- {
- CString value;
- std::string strKey = *iterMember;
- if (valRoot[strKey.c_str()].isString())
- {
- CString strVal = valRoot[strKey.c_str()].asCString();
- std::cout << strKey.c_str() << ":" << strVal << std::endl;
- cout << "字符串" << endl;
- RS.AddTail(strVal);
- }
- else if (valRoot[strKey.c_str()].isInt())
- {
- int iVal = valRoot[strKey.c_str()].asInt();
- value.Format("%d", iVal);
- std::cout << strKey.c_str() << ":" << iVal << std::endl;
- cout << "int" << endl;
- RS.AddTail(value);
- }
- else if (valRoot[strKey.c_str()].isDouble())
- {
- double dVal = valRoot[strKey.c_str()].asDouble();
- value.Format("%lf", dVal);
- std::cout << strKey.c_str() << ":" << value << std::endl;
- cout << "double" << endl;
- RS.AddTail(value);
- }
- else
- {
- std::string strVal = valRoot[strKey.c_str()].toStyledString();
- std::cout << strKey.c_str() << ":" << strVal.c_str() << std::endl;
- }
- }
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 执行[%s]结束, HttpStr = %s, 接口中查到记录"), Info, t_Url);
- }
- else //不需要记录集
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 执行[%s]结束, Http_Str = %s"), Info, t_Url);
- nRet = m_FailPos;
- }
- return nRet;
- }
- CCellBase * CCellHttpClient::copy(void)
- {
- cout << "CCellHttpClient::copy(void)" << endl;
- CCellBase *pCellBase = new CCellHttpClient(*this);
- return pCellBase;
- }
- bool CCellHttpClient::fillData(IFlowDataProvider & Provider)
- {
- cout << "CCellHttpClient::fillData(IFlowDataProvider & Provider)" << endl;
- CString Data;
- do
- {
- cout << "CCellHttpClient::fillData(IFlowDataProvider & Provider) 内部" << endl;
- 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_HTTPSTR, m_Url)) // 2019-8-14
- {
- Data = _T("HTTP接口网址");
- break;
- }
- if (!Provider.getData(CELL_ATTRIBUTE_SAVE_FLAG, Data))
- {
- Data = _T("保存标志");
- break;
- }
- else
- {
- if (Data == DATA_BOOL_YES)
- m_IsSaveRs = true;
- else
- m_IsSaveRs = false;
- }
- if (!Provider.getData(CELL_ATTRIBUTE_SUCCESS_POS, Data))
- {
- Data = _T("成功跳转节点");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_SuccessPos);
- if (m_SuccessPos < 0)
- {
- Data = _T("成功跳转节点");
- break;
- }
- }
- if (!Provider.getData(CELL_ATTRIBUTE_FAIL_POS, Data))
- {
- Data = _T("失败跳转节点");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_FailPos);
- if (m_FailPos < 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_HTTP, Data);
- return false;
- }
|