Commit 31862199 by guanghui.cui

设置pos优先级

parent 151657fa
...@@ -122,7 +122,8 @@ struct customer ...@@ -122,7 +122,8 @@ struct customer
struct orderObj struct orderObj
{ {
int fm_cmd=0; //请求类型 int fm_cmd=0; //请求类型
std::string channel; //订单渠道 std::string channel; //订单渠道
bool offline_bonus=false; //是否需要线下累分
int order_no=0; //订单序号 int order_no=0; //订单序号
std::string order_id; //订单标识号 std::string order_id; //订单标识号
std::string create_time; //订单创建时间 std::string create_time; //订单创建时间
......
...@@ -87,6 +87,12 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -87,6 +87,12 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
rapidjson::Value& channel = document["channel"]; rapidjson::Value& channel = document["channel"];
order.channel=channel.GetString(); order.channel=channel.GetString();
if(document.HasMember("offlinePoints")){
rapidjson::Value& offlinePoints = document["offlinePoints"];
order.offline_bonus=offlinePoints.GetBool();
}
rapidjson::Value& token = document["token"]; rapidjson::Value& token = document["token"];
token.GetString(); token.GetString();
...@@ -582,7 +588,7 @@ bool JsonModule::convertInitDataPos2Ods(IN const std::string& data, OUT std::str ...@@ -582,7 +588,7 @@ bool JsonModule::convertInitDataPos2Ods(IN const std::string& data, OUT std::str
writer.EndObject(); writer.EndObject();
return buffer.GetString(); result = buffer.GetString();
return true; return true;
...@@ -693,9 +699,6 @@ bool JsonModule::getPosResponseData(const std::string &odsResponse,IN const std: ...@@ -693,9 +699,6 @@ bool JsonModule::getPosResponseData(const std::string &odsResponse,IN const std:
result = _convertToOrderOperationReponseJson(odsResponse.data()); result = _convertToOrderOperationReponseJson(odsResponse.data());
rlt=true; rlt=true;
} }
else if(fm_cmd==REQUEST_TYPE_POS_PRIORITY){
}
// serverResponseOperationObj obj; // serverResponseOperationObj obj;
// if(_getServerResponseData(odsResponse.data(),obj)){ // if(_getServerResponseData(odsResponse.data(),obj)){
...@@ -872,9 +875,6 @@ bool JsonModule::convertDataPos2Ods(const std::string &data, std::string &result ...@@ -872,9 +875,6 @@ bool JsonModule::convertDataPos2Ods(const std::string &data, std::string &result
else if(fm_cmd==REQUEST_TYPE_GOODS_CHANGE){ else if(fm_cmd==REQUEST_TYPE_GOODS_CHANGE){
} }
else if(fm_cmd==REQUEST_TYPE_POS_PRIORITY){
rlt=_convertPOSReqPriorityJson(data,result);
}
return rlt; return rlt;
...@@ -920,6 +920,9 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -920,6 +920,9 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
writer.Key("channel"); writer.Key("channel");
writer.String(obj.channel.c_str()); writer.String(obj.channel.c_str());
writer.Key("offline_bonus");
writer.Bool(obj.offline_bonus);
writer.Key("order_no"); writer.Key("order_no");
writer.Int(obj.order_no); writer.Int(obj.order_no);
...@@ -1913,4 +1916,15 @@ bool JsonModule::_convertPOSReqPriorityJson(IN const std::string& posReq,OUT con ...@@ -1913,4 +1916,15 @@ bool JsonModule::_convertPOSReqPriorityJson(IN const std::string& posReq,OUT con
//odsJson = buffer.GetString(); //odsJson = buffer.GetString();
return true; return true;
}
bool JsonModule::convertSetPosPriorityDataPos2Ods(IN const std::string& data, OUT std::string& result)
{
return _convertPOSReqPriorityJson(data,result);
}
bool JsonModule::getSetPosPriorityBackData(IN const char* inJson,OUT std::string& outJson)
{
//缺接口
return true;
} }
\ No newline at end of file
...@@ -46,6 +46,18 @@ public: ...@@ -46,6 +46,18 @@ public:
* */ * */
bool convertInitDataPos2Ods(IN const std::string& data, OUT std::string& result); bool convertInitDataPos2Ods(IN const std::string& data, OUT std::string& result);
/* 功能:转换POS设置POS优先级数据格式到中台数据格式
* 参数:[1]POS数据格式[2]转换后数据
* 返回:是否转换成功
* */
bool convertSetPosPriorityDataPos2Ods(IN const std::string& data, OUT std::string& result);
/* 功能:获取POS设置优先级,ODS返回数据
* 参数:[1]返回json数据 [2]pos需要的json数据
* 返回:是否正确格式
* */
bool getSetPosPriorityBackData(IN const char* inJson,OUT std::string& outJson);
/* 功能:获取POS请求的返回数据 /* 功能:获取POS请求的返回数据
* 参数:[1]状态码[2]消息[3]转换后数据 * 参数:[1]状态码[2]消息[3]转换后数据
* 重载:[1]ODS返回数据[2]转换后数据 * 重载:[1]ODS返回数据[2]转换后数据
......
...@@ -15,6 +15,9 @@ INITIALIZE_EASYLOGGINGPP ...@@ -15,6 +15,9 @@ INITIALIZE_EASYLOGGINGPP
std::string g_init_data; std::string g_init_data;
std::string g_init_data_ods_back; std::string g_init_data_ods_back;
std::string g_set_pos_priority; //设置pos优先级
std::string g_set_pos_priority_ods_back;
std::string ods_ip; std::string ods_ip;
std::string pos_ip = "127.0.0.1"; std::string pos_ip = "127.0.0.1";
int ods_push_port; int ods_push_port;
...@@ -23,7 +26,8 @@ int client_listen_port; ...@@ -23,7 +26,8 @@ int client_listen_port;
int pos_listen_port; int pos_listen_port;
std::vector<orderSendFailedObj> vecFailedOrders; std::vector<orderSendFailedObj> vecFailedOrders;
bool bRetryThreadRunning=false; //retry线程是否正在运行 bool bRetryThreadRunning=false; //retry线程是否正在运行
bool bInitDone=false; //初始化完成 bool bInitDone=false; //初始化完成
bool bPriorityDone=true; //设置POS优先级
SQLite sqlite; SQLite sqlite;
//函数,订单信息发送给pos //函数,订单信息发送给pos
...@@ -71,20 +75,24 @@ void* listen_pos_func(void* arg) ...@@ -71,20 +75,24 @@ void* listen_pos_func(void* arg)
{ {
posRequestData = tmpBuf; posRequestData = tmpBuf;
// 如果为初始化请求则通过长连接socket发送 // 如果为初始化请求则通过长连接socket发送
bool isInit=jsonTool.isInitData(posRequestData); //bool isInit=jsonTool.isInitData(posRequestData);
if(isInit) int reqType=jsonTool.getPushType(posRequestData.data());
LOG(INFO)<<"reqType.:"<<reqType;
if(reqType==REQUEST_TYPE_INIT)
{ {
bInitDone=false; bInitDone=false;
if( jsonTool.checkInitData(posRequestData, pos_listen_port) ) if( jsonTool.checkInitData(posRequestData, pos_listen_port) )
{ {
g_init_data_ods_back.clear();
//g_init_data = posRequestData; //g_init_data = posRequestData;
jsonTool.convertInitDataPos2Ods(posRequestData,g_init_data); jsonTool.convertInitDataPos2Ods(posRequestData,g_init_data);
//jsonTool.getPosResponseData(100, "successful!", responseData); //jsonTool.getPosResponseData(100, "successful!", responseData);
LOG(INFO) <<"POS init data:"<<g_init_data.c_str(); LOG(INFO) <<"POS init data.:"<<g_init_data.c_str();
//等待ods返回初始化结果 //等待ods返回初始化结果
while(true){ while(true){
if(!g_init_data_ods_back.empty()){ if(!g_init_data_ods_back.empty()){
jsonTool.getInitBackData(g_init_data_ods_back.data(),responseData); jsonTool.getInitBackData(g_init_data_ods_back.data(),responseData);
LOG(INFO) <<"responseData:"<<responseData.c_str();
break; break;
} }
else{ else{
...@@ -97,7 +105,29 @@ void* listen_pos_func(void* arg) ...@@ -97,7 +105,29 @@ void* listen_pos_func(void* arg)
{ {
jsonTool.getPosResponseData(101, "invalid initdata!", responseData); jsonTool.getPosResponseData(101, "invalid initdata!", responseData);
} }
}else }
else if(reqType==REQUEST_TYPE_POS_PRIORITY){
if(bInitDone){
//未完成,缺接口
bPriorityDone=false;
LOG(INFO)<<"POS send priority data:"<<posRequestData.data();
g_set_pos_priority_ods_back.clear();
jsonTool.convertSetPosPriorityDataPos2Ods(posRequestData,g_set_pos_priority);
//等待ods返回初始化结果
while(true){
if(!g_set_pos_priority_ods_back.empty()){
jsonTool.getSetPosPriorityBackData(g_set_pos_priority_ods_back.data(),responseData);
break;
}
else{
LOG(INFO)<<"wait for ods priority back data";
sleep(1);
}
}
}
}
else
{ {
LOG(INFO)<<"POS send data:"<<posRequestData.data(); LOG(INFO)<<"POS send data:"<<posRequestData.data();
// 将POS请求数据转换为中台可接受数据格式 // 将POS请求数据转换为中台可接受数据格式
...@@ -137,9 +167,13 @@ void* listen_pos_func(void* arg) ...@@ -137,9 +167,13 @@ void* listen_pos_func(void* arg)
LOG(INFO) << "ODS response data:"<<responseData.data(); LOG(INFO) << "ODS response data:"<<responseData.data();
pos.write(responseData.c_str()); pos.write(responseData.c_str());
pos.close(); pos.close();
if(isInit){ if(reqType==REQUEST_TYPE_INIT){
bInitDone=true; //初始化完成,可以接收订单 bInitDone=true; //初始化完成,可以接收订单
} }
if(reqType==REQUEST_TYPE_POS_PRIORITY){
bPriorityDone=true; //设置pos优先级完成
}
LOG(INFO)<<"pos.close";
}else }else
{ {
LOG(INFO) << "recv pos pushDate failed"; LOG(INFO) << "recv pos pushDate failed";
...@@ -204,7 +238,7 @@ int main() ...@@ -204,7 +238,7 @@ int main()
/// 注册回调函数 /// 注册回调函数
el::Helpers::installPreRollOutCallback(logRolloutHandler); el::Helpers::installPreRollOutCallback(logRolloutHandler);
LOG(INFO)<<"---------software start---------."; LOG(INFO)<<"---------software start---------";
//sqlite初始化 //sqlite初始化
if(!sqlite.initSQLite()){ if(!sqlite.initSQLite()){
...@@ -262,11 +296,10 @@ int main() ...@@ -262,11 +296,10 @@ int main()
// 注册socket信息 // 注册socket信息
while(true) while(true)
{ {
//g_init_data = "{\"fm_cmd\": 1000,\"store_id\": \"208888\",\"pos_id\": \"0001\",\"operator_id\": \"00001\",\"business_date\": \"20171225\",\"is_master\": true,\"listen_port\": 3289}"; //g_init_data = "{\"fm_cmd\": 1000,\"storeId\": \"208888\",\"pos_id\": \"0001\",\"operator_id\": \"00001\",\"business_date\": \"20171225\",\"is_master\": true,\"listen_port\": 3289,\"ver\":1}";
if(!g_init_data.empty()) if(!g_init_data.empty())
{ {
g_init_data_ods_back.clear();
if( ods.send(g_init_data) ) if( ods.send(g_init_data) )
{ {
ods.receive(odsPushData); ods.receive(odsPushData);
...@@ -302,6 +335,16 @@ int main() ...@@ -302,6 +335,16 @@ int main()
} }
} }
if(!bPriorityDone){
LOG(INFO)<<"ODS set priority send:"<<g_set_pos_priority.data();
if( ods.send(g_set_pos_priority) )
{
ods.receive(odsPushData);
g_set_pos_priority_ods_back=odsPushData;
LOG(INFO)<<"ODS set priority back:"<<odsPushData.data();
}
}
if( ods.receive(odsPushData) ) if( ods.receive(odsPushData) )
{ {
LOG(INFO) << "----------------recved ODS data------------------."; LOG(INFO) << "----------------recved ODS data------------------.";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment