Commit 5184cd29 by guanghui.cui

pos主动推送订单状态处理

parent 2cd195a1
...@@ -63,6 +63,8 @@ ...@@ -63,6 +63,8 @@
//POS操作类型 //POS操作类型
#define OPERATION_POS_CONFIRM 1011 //确认接单 #define OPERATION_POS_CONFIRM 1011 //确认接单
#define OPERATION_POS_CANCEL 1012 //拒绝接单 #define OPERATION_POS_CANCEL 1012 //拒绝接单
#define OPERATION_POS_REFUND_AGREE 1013 //同意退款
#define OPERATION_POS_REFUND_DISAGREE 1014 //拒绝退款
/*********************************** /***********************************
ODS相关预定义变量 ODS相关预定义变量
...@@ -98,4 +100,10 @@ ...@@ -98,4 +100,10 @@
#define ODS_PUSH_TYPE_COMMON 1017 //通用预警 #define ODS_PUSH_TYPE_COMMON 1017 //通用预警
#define ODS_PUSH_TYPE_COMMON_BACK 1018 //通用预警返回 #define ODS_PUSH_TYPE_COMMON_BACK 1018 //通用预警返回
//POS主动推送请求类型
#define ODS_POSPUSH_CONFIRM 1 //确认接单
#define ODS_POSPUSH_CANCEL 2 //拒绝接单
#define ODS_POSPUSH_REFUND_AGREE 5 //同意退款
#define ODS_POSPUSH_REFUND_DISAGREE 6 //拒绝退款
#endif #endif
\ No newline at end of file
...@@ -192,6 +192,8 @@ struct stockWarnObj ...@@ -192,6 +192,8 @@ struct stockWarnObj
struct orderOperationObj struct orderOperationObj
{ {
int fm_cmd=0; //请求类型 •1011 确认接单 •1012 拒绝接单 int fm_cmd=0; //请求类型 •1011 确认接单 •1012 拒绝接单
std::string store_id; //门店号
std::string channel; //渠道
std::string order_id; //订单编号 std::string order_id; //订单编号
std::string comment; //操作原因描述 std::string comment; //操作原因描述
}; };
......
...@@ -705,13 +705,45 @@ bool JsonModule::getOdsResponseData(int status_code, const std::string &msg, std ...@@ -705,13 +705,45 @@ bool JsonModule::getOdsResponseData(int status_code, const std::string &msg, std
bool JsonModule::convertDataPos2Ods(const std::string &data, std::string &result) bool JsonModule::convertDataPos2Ods(const std::string &data, std::string &result)
{ {
orderOperationObj obj; if( data.empty()){
if(_getPOSOperationObj(data.data(),obj)){ LOG(INFO)<<"convertDataPos2Ods empty input";
result=_convertPosOperationToOdsJson(obj); return false;
return true;
} }
return false; rapidjson::Document document;
document.Parse(data.c_str());
if (document.HasParseError())
{
LOG(INFO)<<"convertDataPos2Ods posResponse JSON parse error:"<<document.GetParseError()<<":"<<document.GetErrorOffset();
return false;
}
if( !document.HasMember("fm_cmd") )
{
LOG(INFO)<<"Don't have needed parames.";
return false;
}
int fm_cmd = document["fm_cmd"].GetInt();
LOG(INFO)<<"fm_cmd:"<<fm_cmd;
bool rlt=false;
if(fm_cmd==OPERATION_POS_CONFIRM||fm_cmd==OPERATION_POS_CANCEL||fm_cmd==OPERATION_POS_REFUND_AGREE||fm_cmd==OPERATION_POS_REFUND_DISAGREE){
orderOperationObj obj;
if(_getPOSOperationObj(data.data(),obj)){
result=_convertPosOperationToOdsJson(obj);
rlt = true;
}
}
else if(fm_cmd==REQUEST_TYPE_GOODS_CHANGE){
}
else if(fm_cmd==REQUEST_TYPE_POS_PRIORITY){
}
return rlt;
} }
bool JsonModule::convertDataOds2Pos(const std::string &data, std::string &result) bool JsonModule::convertDataOds2Pos(const std::string &data, std::string &result)
...@@ -1313,23 +1345,23 @@ bool JsonModule::_getPOSOperationObj(IN const char* data,OUT orderOperationObj & ...@@ -1313,23 +1345,23 @@ bool JsonModule::_getPOSOperationObj(IN const char* data,OUT orderOperationObj &
} }
else else
{ {
if(document.HasMember("fm_cmd")) rapidjson::Value& fm_cmd = document["fm_cmd"];
{ operation_obj.fm_cmd=fm_cmd.GetInt();
rapidjson::Value& fm_cmd = document["fm_cmd"]; rapidjson::Value& order_id = document["order_id"];
int reqType = fm_cmd.GetInt(); operation_obj.order_id=order_id.GetString();
if(reqType==OPERATION_POS_CONFIRM||reqType==OPERATION_POS_CANCEL){ operation_obj.store_id=_store_id;
operation_obj.fm_cmd=reqType;
rapidjson::Value& order_id = document["order_id"]; if(document.HasMember("channel")){
operation_obj.order_id=order_id.GetString(); rapidjson::Value& channel = document["channel"];
operation_obj.channel=channel.GetString();
if(document.HasMember("comment")){ }
rapidjson::Value& comment = document["comment"];
operation_obj.comment=comment.GetString(); if(document.HasMember("comment")){
} rapidjson::Value& comment = document["comment"];
operation_obj.comment=comment.GetString();
return true;
}
} }
return true;
} }
return false; return false;
} }
...@@ -1341,20 +1373,20 @@ std::string JsonModule::_convertPosOperationToOdsJson(orderOperationObj &operati ...@@ -1341,20 +1373,20 @@ std::string JsonModule::_convertPosOperationToOdsJson(orderOperationObj &operati
writer.StartObject(); writer.StartObject();
writer.Key("channel"); writer.Key("channel");
writer.String(""); writer.String(operation_obj.channel.c_str());
writer.Key("storeId"); writer.Key("shopCode");
writer.String(""); writer.String(operation_obj.store_id.c_str());
writer.Key("order_id"); writer.Key("orderId");
writer.String(operation_obj.order_id.c_str()); writer.String(operation_obj.order_id.c_str());
if(operation_obj.fm_cmd==OPERATION_POS_CONFIRM){
writer.Key("code");
writer.Int(0);
writer.Key("reason"); writer.Key("code");
writer.String(operation_obj.comment.c_str()); int reqType=_getODSStatusByPOSReq(operation_obj.fm_cmd);
} writer.Int(reqType);
writer.Key("reason");
writer.String(operation_obj.comment.c_str());
writer.EndObject(); writer.EndObject();
...@@ -1674,4 +1706,40 @@ bool JsonModule::_getCommonWarnResponseJson(IN const std::string& posResponse, I ...@@ -1674,4 +1706,40 @@ bool JsonModule::_getCommonWarnResponseJson(IN const std::string& posResponse, I
result = buffer.GetString(); result = buffer.GetString();
return true; return true;
}
void JsonModule::setInitData(IN const char* data)
{
rapidjson::Document document; // 定义一个Document对象
document.Parse(data); // 解析,Parse()无返回值,也不会抛异常
if (document.HasParseError()) // 通过HasParseError()来判断解析是否成功
{
LOG(ERROR) << "setInitData JSON parse error:" << document.GetParseError() << ":" << document.GetErrorOffset();
return;
}
_store_id = document["store_id"].GetString();
}
int JsonModule::_getODSStatusByPOSReq(int fm_cmd)
{
int rlt=0;
switch(fm_cmd)
{
case OPERATION_POS_CONFIRM:
rlt=ODS_POSPUSH_CONFIRM;
break;
case OPERATION_POS_CANCEL:
rlt=ODS_POSPUSH_CANCEL;
break;
case OPERATION_POS_REFUND_AGREE:
rlt=ODS_POSPUSH_REFUND_AGREE;
break;
case OPERATION_POS_REFUND_DISAGREE:
rlt=ODS_POSPUSH_REFUND_DISAGREE;
break;
default:
break;
}
return rlt;
} }
\ No newline at end of file
...@@ -75,10 +75,21 @@ public: ...@@ -75,10 +75,21 @@ public:
* */ * */
int getPushType(IN const char* data); int getPushType(IN const char* data);
/* 功能:缓存初始化信息,其它接口需要门店信息字段时可以直接拿取
* 参数:[1]初始化json
* 返回:...
* */
void setInitData(IN const char* data);
private:
std::string _store_id; //门店号
private: private:
std::string _getDeliveryTypeString(int type); std::string _getDeliveryTypeString(int type);
//订单状态转换(转换为POS对应的状态) //订单状态转换(转换为POS对应的状态)
int _getPOSOrderStatus(int status); int _getPOSOrderStatus(int status);
//POS请求类型转换为ODS需要类型
int _getODSStatusByPOSReq(int fm_cmd);
void _getStatusObj(IN orderObj &order_obj,OUT orderStatusObj &status_obj); void _getStatusObj(IN orderObj &order_obj,OUT orderStatusObj &status_obj);
void _getRefundObj(IN orderObj &order_obj,OUT refundObj &refund_obj); void _getRefundObj(IN orderObj &order_obj,OUT refundObj &refund_obj);
...@@ -101,6 +112,7 @@ private: ...@@ -101,6 +112,7 @@ private:
bool _getOrderResponseJson(IN const std::string& posResponse, IN const std::string& orderData, OUT std::string& result); bool _getOrderResponseJson(IN const std::string& posResponse, IN const std::string& orderData, OUT std::string& result);
bool _getStockWarnResponseJson(IN const std::string& posResponse, IN const std::string& orderData, IN const std::string& odsData,OUT std::string& result); bool _getStockWarnResponseJson(IN const std::string& posResponse, IN const std::string& orderData, IN const std::string& odsData,OUT std::string& result);
bool _getCommonWarnResponseJson(IN const std::string& posResponse, IN const std::string& orderData, IN const std::string& odsData,OUT std::string& result); bool _getCommonWarnResponseJson(IN const std::string& posResponse, IN const std::string& orderData, IN const std::string& odsData,OUT std::string& result);
}; };
#endif #endif
...@@ -91,6 +91,7 @@ void* listen_pos_func(void* arg) ...@@ -91,6 +91,7 @@ void* listen_pos_func(void* arg)
sleep(1); sleep(1);
} }
} }
jsonTool.setInitData(posRequestData.data()); //把初始化数据暂存起来
}else }else
{ {
jsonTool.getPosResponseData(101, "invalid initdata!", responseData); jsonTool.getPosResponseData(101, "invalid initdata!", responseData);
......
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