Commit 19f0c495 by wuyang.zou

Fix New Feature

1、完善代码格式
2、当前分支支持 WindowsDebug模式脱离POS运行
3、注册登录时带上程序版本号

VERSION: 2.1.2 RC
parent e61f9aa7
...@@ -9,3 +9,15 @@ build:编译中间文件<br> ...@@ -9,3 +9,15 @@ build:编译中间文件<br>
依赖库:sqlite、cmake(2.8及以上)、gcc(4.8.2及以上)<br> 依赖库:sqlite、cmake(2.8及以上)、gcc(4.8.2及以上)<br>
##【软件准备完成后,需要配置应用的相关路径,保证CMake能够正确生成 MakeFile 文件】
## 查看 新编译生成的 应用文件的依赖库信息 ldd takeaway;
## 程序启动脚本 /opt/pos/bin/run_cream.sh -> nohup /opt/pos/fmtakeout/takeaway > /dev/null &;
## 程序守护: takeaway程序将监听POS请求放到新建线程中;主线程监听ODS推送数据并及时转发给POS插件;
## ====Famliy Pos Plugin 版本提交历史记录====
1.1 2020-11-18 wuyang.zou Version: 2.1.2 RC //①完善代码格式 ②当前分支支持 WindowsDebug模式脱离POS运行 ③注册登录时带上程序版本号;
0:Check MD5: *************** takeaway Version:2.1.2 RC
1:把文件拷贝到POS后,需要给“takeaway”文件赋予可执行权限,命令:chmod +x takeaway
2: 特别注意
<<贝瑞>>
config.ini 文件 中 [ODS] 模块中的
#(生产环境外网 IP)
ip: 103.13.247.77
#(测试环境外网 IP [内网IP:10.0.103.116] )
ip: 103.13.247.78
<<全家>>
config.ini 文件 中 [ODS] 模块中的
#(生产环境外网 IP)
ip: 103.13.247.72
#(测试环境外网 IP)
ip: 103.13.247.*
3: ===============================版本提交历史记录================================
1.1 2020-11-17 wuyang.zou Version:2.1.2 RC //①完善代码格式 ②当前分支支持 WindowsDebug模式脱离POS运行 ③注册登录时带上程序版本号;
\ No newline at end of file
...@@ -8,20 +8,18 @@ ...@@ -8,20 +8,18 @@
POS相关预定义变量 POS相关预定义变量
***********************************/ ***********************************/
//订单状态对照表 //订单状态对照表
#define ORDERSTATUS_NEW 1001 //新生成 #define P_OS_NEW 1001 //新生成
#define ORDERSTATUS_CONFIRMED 1002 //已确定 #define P_OS_CONFIRMED 1002 //已确定
#define ORDERSTATUS_CANCELED 1003 //已取消 #define P_OS_CANCELED 1003 //已取消
#define ORDERSTATUS_SHIPPING 1004 //配送中 #define P_OS_SHIPPING 1004 //配送中
//#define ORDERSTATUS_WAITE_SHIPPING 1005 //外卖-等待配送 #define P_OS_COMPLETE 1006 //已完成(已核销)
#define ORDERSTATUS_COMPLETE 1006 //已完成(已核销) #define P_OS_REFUND_FULL 1020 //申请全额退款
#define ORDERSTATUS_REFUND_FULL 1020 //申请全额退款 #define P_OS_REFUND_PART 1021 //申请部分退款
#define ORDERSTATUS_REFUND_PART 1021 //申请部分退款 #define P_OS_REFUND_COMPLETE 1022 //退款完成
#define ORDERSTATUS_REFUND_COMPLETE 1022 //退款完成 #define P_OS_APPOINTMENT_PAID 1030 //已支付(点取分离)
//#define ORDERSTATUS_LOCK 1100 //外卖-已锁定 #define P_OS_APPOINTMENT_REFUND 1031 //用户退款(点取分离)
#define ORDERSTATUS_APPOINTMENT_PAID 1030 //已支付(点取分离) #define P_OS_SCANCODE_PAID 1032 //已支付(扫码购)
#define ORDERSTATUS_APPOINTMENT_REFUND 1031 //用户退款(点取分离) #define P_OS_SHAPPING_COMFIRMED 1040 //骑手接单(咖啡)
#define ORDERSTATUS_SCANCODE_PAID 1032 //已支付(扫码购)
#define ORDERSTATUS_SHAPPING_COMFIRMED 1040 //骑手接单(咖啡)
//请求类型对照表 //请求类型对照表
#define REQUEST_TYPE_INIT 1000 //初始化 #define REQUEST_TYPE_INIT 1000 //初始化
...@@ -35,49 +33,53 @@ ...@@ -35,49 +33,53 @@
#define REQUEST_TYPE_QUERY_ORDER_STAUS 1060 //订单状态查询 #define REQUEST_TYPE_QUERY_ORDER_STAUS 1060 //订单状态查询
//点取分离和扫码购 插件向ods请求码 //点取分离和扫码购 插件向ods请求码
#define PLUGIN_TO_ODS_APPOINTMENT_MAKINGDONE 1020 //制作完成(点取分离) #define PG2ODS_APPOINTMENT_MAKINGDONE 1020 //制作完成(点取分离)
#define PLUGIN_TO_ODS_APPOINTMENT_DONE 1021 //已完成(点取分离) #define PG2ODS_APPOINTMENT_DONE 1021 //已完成(点取分离)
#define PLUGIN_TO_ODS_APPOINTMENT_REFUND 1022 //pos退款(点取分离) #define PG2ODS_APPOINTMENT_REFUND 1022 //pos退款(点取分离)
#define PLUGIN_TO_ODS_APPOINTMENT_CONFIRM 1023 //确认接单(点取分离) #define PG2ODS_APPOINTMENT_CONFIRM 1023 //确认接单(点取分离)
#define PLUGIN_TO_ODS_SCANCODE_DONE 1024 //已完成(扫码购) #define PG2ODS_SCANCODE_DONE 1024 //已完成(扫码购)
#define PLUGIN_TO_ODS_SCANCODE_REFUND 1025 //pos退款(扫码购) #define PG2ODS_SCANCODE_REFUND 1025 //pos退款(扫码购)
//咖啡小程序 插件向ods请求码 //咖啡小程序 插件向ods请求码
#define PLUGIN_TO_ODS_COFFEE_REFUND 400011 //pos退款(咖啡小程序) #define PG2ODS_COF_REFUND 400011 //pos退款(咖啡小程序)
#define PLUGIN_TO_ODS_COFFEE_MAKEING_DONE 400010 //制作完成(咖啡小程序) #define PG2ODS_COF_MAKEING_DONE 400010 //制作完成(咖啡小程序)
#define PLUGIN_TO_ODS_COFFEE_DONE 40007 //已完成(咖啡小程序) #define PG2ODS_COF_DONE 40007 //已完成(咖啡小程序)
//配送类型对照表 //配送类型对照表
#define DELIVERY_TYPE_SELF "self" //自配送 #define DELIVERY_T_SELF "self" //自配送
#define DELIVERY_TYPE_PLATFORM "platform" //平台配送 #define DELIVERY_T_PLATFORM "platform" //平台配送
#define DELIVERY_TYPE_THRID "thrid" //第三方配送 #define DELIVERY_T_THRID "thrid" //第三方配送
//配送状态对照表 //配送状态对照表
#define DELIVERY_STATUS_WAIT 0 //等待配送 /*
#define DELIVERY_STATUS_CONFIRMED 1 //配送单已确认 #define DELIVERY_S_WAIT 0 //等待配送
#define DELIVERY_STATUS_CANCELED 2 //配送单已取消 #define DELIVERY_S_CONFIRMED 1 //配送单已确认
#define DELIVERY_STATUS_SHIPPING 3 //配送中 #define DELIVERY_S_CANCELED 2 //配送单已取消
#define DELIVERY_STATUS_COMPLETE 4 //配送完成 #define DELIVERY_S_SHIPPING 3 //配送中
#define DELIVERY_STATUS_RECRY_CONFIRM 5 //配送员取消抢单,等待重新抢单 #define DELIVERY_S_COMPLETE 4 //配送完成
#define DELIVERY_STATUS_FAILED 6 //配送失败 #define DELIVERY_S_RECRY_CONFIRM 5 //配送员取消抢单,等待重新抢单
#define DELIVERY_STATUS_UNWRITE -1 //未写入状态 #define DELIVERY_S_FAILED 6 //配送失败
#define DELIVERY_S_UNWRITE -1 //未写入状态
*/
//平台代码对照表 //平台代码对照表
#define PLANTFORM_CODE_OFFLINE_COMMON 101 //线下普通单 /*
#define PLANTFORM_CODE_OFFLINE_YIGUO_DISTRIBUTION 102 //线下易果分销 #define PC_OFFL_COMMON 101 //线下普通单
#define PLANTFORM_CODE_ONLINE_AUTO_MACHINE 201 //线上自动贩卖机 #define PC_OFFL_YIGUO_DIST 102 //线下易果分销
#define PLANTFORM_CODE_ONLINE_AUTO_WASHER 202 //线上自动洗衣机 #define PC_ONL_AUTO_MACHINE 201 //线上自动贩卖机
#define PLANTFORM_CODE_ONLINE_QR_CODE 203 //线上QR扫码购 #define PC_ONL_AUTO_WASHER 202 //线上自动洗衣机
#define PLANTFORM_CODE_ONLINE_YIGUO_TO_QUANJIA_DISTRIBUTION 204 //线上易果给全家分销 #define PC_ONL_QR_CODE 203 //线上QR扫码购
#define PLANTFORM_CODE_ONLINE_MEITUAN 205 //线上美团外卖 #define PC_ONL_YIGUO_TO_QUANJIA 204 //线上易果给全家分销
#define PLANTFORM_CODE_ONLINE_BAIDU 206 //线上百度外卖 #define PC_ONL_MEITUAN 205 //线上美团外卖
#define PLANTFORM_CODE_ONLINE_ELEMA 207 //线上饿了吗外卖 #define PC_ONL_BAIDU 206 //线上百度外卖
#define PLANTFORM_CODE_ONLINE_JINGDONG 208 //线上京东外卖 #define PC_ONL_ELEMA 207 //线上饿了吗外卖
#define PLANTFORM_CODE_ONLINE_EBAI 209 //线上饿百外卖 #define PC_ONL_JINGDONG 208 //线上京东外卖
#define PLANTFORM_CODE_ONLINE_JIXIANG 210 //集享外卖 #define PC_ONL_EBAI 209 //线上饿百外卖
#define PLANTFORM_CODE_ONLINE_APPOINTMENT 211 //点取分离 #define PC_ONL_JIXIANG 210 //集享外卖
#define PLANTFORM_CODE_ONLINE_QUANJIA 212 //全家外卖 #define PC_ONL_APP 211 //贝瑞: 商家APP ; 全家:点取分离
#define PLANTFORM_CODE_ONLINE_COFFEE 213 //咖啡小程序 #define PC_ONL_QUANJIA 212 //全家外卖
#define PC_ONL_COFFEE 213 //咖啡小程序
*/
//响应状态对照表 //响应状态对照表
#define RESPONSE_CODE_SUCCESS 100 //成功 #define RESPONSE_CODE_SUCCESS 100 //成功
...@@ -87,8 +89,7 @@ ...@@ -87,8 +89,7 @@
#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_AGREE 1013 //同意退款(外卖)
#define OPERATION_POS_REFUND_DISAGREE 1014 //拒绝退款(外卖) #define OPERATION_POS_REFUND_DISAGREE 1014 //拒绝退款(外卖)
//#define OPERATION_POS_APPOINTMENT_MAKEING 1015 //制作中(点取分离)
#define OPERATION_POS_APPOINTMENT_MAKEING_DONE 1016 //制作完成(点取分离) #define OPERATION_POS_APPOINTMENT_MAKEING_DONE 1016 //制作完成(点取分离)
#define OPERATION_POS_APPOINTMENT_DONE 1017 //已完成(点取分离) #define OPERATION_POS_APPOINTMENT_DONE 1017 //已完成(点取分离)
#define OPERATION_POS_APPOINTMENT_REFUND 1018 //pos退款(点取分离) #define OPERATION_POS_APPOINTMENT_REFUND 1018 //pos退款(点取分离)
...@@ -108,35 +109,35 @@ ...@@ -108,35 +109,35 @@
#define ODS_DELIVERY_TYPE_PLATFORM 1 //平台配送 #define ODS_DELIVERY_TYPE_PLATFORM 1 //平台配送
//订单状态对照表 //订单状态对照表
#define ODS_ORDERSTATUS_NEW 1 //新生成 #define ODS_OS_NEW 1 //新生成
#define ODS_ORDERSTATUS_CONFIRMED 2 //已确定 #define ODS_OS_CONFIRMED 2 //已确定
#define ODS_ORDERSTATUS_CANCELED 3 //已取消 #define ODS_OS_CANCELED 3 //已取消
#define ODS_ORDERSTATUS_SHIPPING 4 //配送中 #define ODS_OS_SHIPPING 4 //配送中
#define ODS_ORDERSTATUS_WAIT_SHIPPING 5 //等待配送 #define ODS_OS_WAIT_SHIPPING 5 //等待配送
#define ODS_ORDERSTATUS_COMPLETE 6 //已送达 #define ODS_OS_COMPLETE 6 //已送达
#define ODS_ORDERSTATUS_DONE 200 //已送达 #define ODS_OS_DONE 200 //已送达
#define ODS_ORDERSTATUS_REFUND_FULL 20 //申请全额退款 #define ODS_OS_REFUND_FULL 20 //申请全额退款
#define ODS_ORDERSTATUS_REFUND_PART 21 //申请部分退款 #define ODS_OS_REFUND_PART 21 //申请部分退款
#define ODS_ORDERSTATUS_REFUND_AGREE 30 //同意退款 #define ODS_OS_REFUND_AGREE 30 //同意退款
#define ODS_ORDERSTATUS_REFUND_DISAGREE 40 //不同意退款 #define ODS_OS_REFUND_DISAGREE 40 //不同意退款
#define ODS_ORDERSTATUS_REFUND_COMPLETE 100 //退款完成 #define ODS_OS_REFUND_COMPLETE 100 //退款完成
#define ODS_ORDERSTATUS_CANCELED_TIMEOUT 3001 //超时取消 #define ODS_OS_CANCELED_TIMEOUT 3001 //超时取消
#define ODS_ORDERSTATUS_CANCELED_USER 3002 //用户取消 #define ODS_OS_CANCELED_USER 3002 //用户取消
#define ODS_ORDERSTATUS_CANCELED_KEFU 3003 //客服取消 #define ODS_OS_CANCELED_KEFU 3003 //客服取消
#define ODS_ORDERSTATUS_CANCELED_SYS 3004 //系统取消 #define ODS_OS_CANCELED_SYS 3004 //系统取消
#define ODS_ORDERSTATUS_CANCELED_OTHER 3100 //其他原因取消 #define ODS_OS_CANCELED_OTHER 3100 //其他原因取消
#define ODS_ORDERSTATUS_LOCK -1 //已锁定 #define ODS_OS_LOCK -1 //已锁定
#define ODS_ORDERSTATUS_APPOINTMENT_PAID 20004 //已支付(点取分离) #define ODS_OS_APPOINTMENT_PAID 20004 //已支付(点取分离)
#define ODS_ORDERSTATUS_APPOINTMENT_REFUND 20005 //用户退款(点取分离) #define ODS_OS_APPOINTMENT_REFUND 20005 //用户退款(点取分离)
#define ODS_ORDERSTATUS_SCANCODE_PAID 30004 //已支付(扫码购) #define ODS_OS_SCANCODE_PAID 30004 //已支付(扫码购)
#define ODS_ORDERSTATUS_COFFEE_CANCEL 40002 //已取消(咖啡小程序) #define ODS_OS_COF_CANCEL 40002 //已取消(咖啡小程序)
#define ODS_ORDERSTATUS_COFFEE_TIMEOUT_CANCEL 40003 //超时取消(咖啡小程序) #define ODS_OS_COF_TIMEOUT_CANCEL 40003 //超时取消(咖啡小程序)
#define ODS_ORDERSTATUS_COFFEE_PAID 40004 //已支付(咖啡小程序) #define ODS_OS_COF_PAID 40004 //已支付(咖啡小程序)
#define ODS_ORDERSTATUS_COFFEE_REFUND_USER 40005 //用户退款申请成功(咖啡小程序) #define ODS_OS_COF_REFUND_USER 40005 //用户退款申请成功(咖啡小程序)
#define ODS_ORDERSTATUS_COFFEE_CONFIRMED 40006 //已接单(咖啡小程序) #define ODS_OS_COF_CONFIRMED 40006 //已接单(咖啡小程序)
#define ODS_ORDERSTATUS_COFFEE_SHIPPING 40008 //配送中(咖啡小程序) #define ODS_OS_COF_SHIPPING 40008 //配送中(咖啡小程序)
#define ODS_ORDERSTATUS_COFFEE_DONE 40009 //已完成(咖啡小程序) #define ODS_OS_COF_DONE 40009 //已完成(咖啡小程序)
#define ODS_ORDERSTATUS_COFFEE_SHIPPING_CONFIRMED 400012 //骑手已接单(咖啡小程序) #define ODS_OS_COF_SHIPPING_CONFIRMED 400012 //骑手已接单(咖啡小程序)
//推送类型 //推送类型
#define ODS_PUSH_TYPE_HEARTBEAT 3 //心跳 #define ODS_PUSH_TYPE_HEARTBEAT 3 //心跳
......
...@@ -52,38 +52,6 @@ struct payment ...@@ -52,38 +52,6 @@ struct payment
std::vector<paymentDetail> vecDetail; //付款明细数组 std::vector<paymentDetail> vecDetail; //付款明细数组
}; };
// //订单积分详情
// struct bonusDetail
// {
// int type=0; //积分类型
// std::string desc; //积分奖励描述
// int point=0; //积分奖励数值
// std::string sku; //积分商品
// };
// //订单积分
// struct bonus
// {
// std::string summary; //积分奖励总和
// std::vector<bonusDetail> vecDetail; //付款明细数组
// };
// //促销明细
// struct promotionsDetail
// {
// std::string pro_id; //促销编码
// int type=0; //促销类型
// std::string desc; //促销描述
// int offer=0; //促销金额
// std::string sku; //促销商品
// };
// //促销
// struct promotions
// {
// std::string summary; //促销金额总和
// std::vector<promotionsDetail> vecDetail; //付款明细数组
// };
//响应结果 //响应结果
struct responseRlt struct responseRlt
...@@ -211,6 +179,7 @@ struct orderObj ...@@ -211,6 +179,7 @@ struct orderObj
int ods_status=0; //ods订单状态 int ods_status=0; //ods订单状态
std::string status_desc; //订单状态描述 std::string status_desc; //订单状态描述
std::string remark; //订单备注 std::string remark; //订单备注
int isNeedTableware = 0; //是否需要餐具
int total_price=0; //订单总价 int total_price=0; //订单总价
int delivery_price=0; //配送费 int delivery_price=0; //配送费
int reduced_price=0; //折扣总金额 int reduced_price=0; //折扣总金额
...@@ -230,6 +199,13 @@ struct orderObj ...@@ -230,6 +199,13 @@ struct orderObj
int totalCouponDiscount = 0; //使用优惠券发生的折扣 int totalCouponDiscount = 0; //使用优惠券发生的折扣
int totalExcessiveCharge = 0; //使用优惠券发生的溢收 int totalExcessiveCharge = 0; //使用优惠券发生的溢收
int zhxPoint = 0; //甄会选积分 int zhxPoint = 0; //甄会选积分
// Berry 新增3个积分字段,全家模式下注释这3个字段;
/*
int otherPoint = 0; //其他品牌积分
int remainingBrandPoint = 0; //品牌-剩余积分
int remainingNkbPoint = 0; //纳客宝集享-剩余积分
*/
store storeInfo; //门店信息 store storeInfo; //门店信息
delivery deliveryInfo; //配送信息 delivery deliveryInfo; //配送信息
......
1:把文件拷贝到POS后,需要给“takeaway”文件赋予可执行权限,命令:chmod +x takeaway
\ No newline at end of file
[SYS] [SYS]
port=24446 port=24446
#<<贝瑞>>
#config.ini 文件 中 [ODS] 模块中的
#(生产环境外网 IP)
#ip: 103.13.247.77
#(测试环境外网 IP [内网IP:10.0.103.116] )
#ip: 103.13.247.78
#<<全家>>
#config.ini 文件 中 [ODS] 模块中的
#(生产环境外网 IP [内网IP:10.0.100.70] )
#ip: 103.13.247.72
#(测试环境外网 IP [内网IP:10.0.102.14] )
#ip: 103.13.247.7*
[ODS] [ODS]
ip=127.0.0.1 ip=127.0.0.1
pushPort=30001 pushPort=30001
recvPort=30002 recvPort=30002
socketTimeout=120 socketTimeout=120
...@@ -10,3 +25,8 @@ socketTimeout=120 ...@@ -10,3 +25,8 @@ socketTimeout=120
[POS] [POS]
ip=127.0.0.1 ip=127.0.0.1
port=24445 port=24445
;Windows 模拟程序 新增可配置功能: 配置门店号, POS号, 是否主POS标识;
;storeId=207777
;posId=1
;isMaster=false
...@@ -11,65 +11,16 @@ ...@@ -11,65 +11,16 @@
std::string g_store_id = ""; std::string g_store_id = "";
std::string g_pos_id = ""; std::string g_pos_id = "";
bool g_pos_ismaster = false;
using namespace rapidjson; using namespace rapidjson;
// std::string GetTestJson(const int statuscode,const char* msg,const char* orderid) JsonModule::JsonModule()
// {
// rapidjson::StringBuffer buffer;
// rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
// writer.StartObject();
// writer.Key("statusCode");
// writer.Int(statuscode);
// writer.Key("msg");
// writer.String(msg);
// writer.Key("orderid");
// writer.String(orderid);
// writer.EndObject();
// return buffer.GetString();
// }
// void parseJson(const char* json)
// {
// rapidjson::Document document; // 定义一个Document对象
// document.Parse(json); // 解析,Parse()无返回值,也不会抛异常
// if (document.HasParseError()) // 通过HasParseError()来判断解析是否成功
// {
// // 可通过GetParseError()取得出错代码,
// // 注意GetParseError()返回的是一个rapidjson::ParseErrorCode类型的枚举值
// // 使用函数rapidjson::GetParseError_En()得到错误码的字符串说明,这里的En为English简写
// // 函数GetErrorOffset()返回出错发生的位置
// LOG(ERROR)<<"JSON parse error:"<<document.GetParseError()<<":"<<document.GetErrorOffset();
// }
// else
// {
// rapidjson::Value& vStatusCode = document["statusCode"];
// rapidjson::Value& vMsg = document["msg"];
// rapidjson::Value& vOrderid = document["orderid"];
// int iStatusCode = vStatusCode.GetInt();
// std::string strMsg = vMsg.GetString();
// std::string strOrderid = vOrderid.GetString();
// LOG(INFO)<<"statusCode:"<<iStatusCode;
// LOG(INFO)<<"msg:"<<strMsg;
// LOG(INFO)<<"orderId:"<<strOrderid;
// }
// }
JsonModule::JsonModule()
{ {
} }
JsonModule::~JsonModule() JsonModule::~JsonModule()
{ {
} }
const char* GetJsonStringSafe(rapidjson::Value& obj,const char* key) const char* GetJsonStringSafe(rapidjson::Value& obj,const char* key)
...@@ -158,9 +109,8 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -158,9 +109,8 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
// 函数GetErrorOffset()返回出错发生的位置 // 函数GetErrorOffset()返回出错发生的位置
LOG(ERROR)<<"getPushOrders JSON parse error:"<<document.GetParseError()<<":"<<document.GetErrorOffset(); LOG(ERROR)<<"getPushOrders JSON parse error:"<<document.GetParseError()<<":"<<document.GetErrorOffset();
return false; return false;
}
else } else {
{
rapidjson::Value& channel = document["channel"]; rapidjson::Value& channel = document["channel"];
order.channel=channel.GetString(); order.channel=channel.GetString();
...@@ -175,11 +125,10 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -175,11 +125,10 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
//配送信息 //配送信息
std::string delivery_type; std::string delivery_type;
if(document.HasMember("delivery")) if ( document.HasMember("delivery") ) {
{
rapidjson::Value& delivery_obj = document["delivery"]; rapidjson::Value& delivery_obj = document["delivery"];
if(delivery_obj.IsObject())
{ if ( delivery_obj.IsObject() ) {
order.customerInfo.address=GetJsonStringSafe(delivery_obj,"customerAddress"); order.customerInfo.address=GetJsonStringSafe(delivery_obj,"customerAddress");
order.customerInfo.name=GetJsonStringSafe(delivery_obj,"customerName"); order.customerInfo.name=GetJsonStringSafe(delivery_obj,"customerName");
order.customerInfo.phone=GetJsonStringSafe(delivery_obj,"customerPhone"); order.customerInfo.phone=GetJsonStringSafe(delivery_obj,"customerPhone");
...@@ -192,35 +141,29 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -192,35 +141,29 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
} }
//发票信息 //发票信息
if(document.HasMember("invoice")) if ( document.HasMember("invoice") ) {
{
rapidjson::Value& invoice_obj = document["invoice"]; rapidjson::Value& invoice_obj = document["invoice"];
if(invoice_obj.IsObject())
{ if ( invoice_obj.IsObject() ) {
GetJsonStringSafe(invoice_obj,"companyName"); GetJsonStringSafe(invoice_obj,"companyName");
GetJsonStringSafe(invoice_obj,"taxNum"); GetJsonStringSafe(invoice_obj,"taxNum");
GetJsonStringSafe(invoice_obj,"title"); GetJsonStringSafe(invoice_obj,"title");
order.invoice_pickup_code = GetJsonStringSafe(invoice_obj,"transNum"); order.invoice_pickup_code = GetJsonStringSafe(invoice_obj,"transNum");
GetJsonIntSafe(invoice_obj,"invoiceType"); GetJsonIntSafe(invoice_obj,"invoiceType");
} }
} }
//订单内容 //订单内容
{ {
rapidjson::Value& orderContent_obj = document["orderContent"]; rapidjson::Value& orderContent_obj = document["orderContent"];
order.create_time = GetJsonStringSafe(orderContent_obj,"createTime"); order.create_time = GetJsonStringSafe(orderContent_obj,"createTime");
//用户信息 //用户信息 顾客信息为数组 因接口改版目前只有一个顾客信息
//TODO 顾客信息为数组 因接口改版目前只有一个顾客信息 if ( orderContent_obj.HasMember("customer") ) {
if(orderContent_obj.HasMember("customer"))
{
rapidjson::Value& customer_array = orderContent_obj["customer"]; rapidjson::Value& customer_array = orderContent_obj["customer"];
if(customer_array.IsArray())
{
for(unsigned int i=0;i<customer_array.Size();i++){
rapidjson::Value& customer_obj = customer_array[i];
if ( customer_array.IsArray() ) {
for ( unsigned int i=0; i<customer_array.Size(); i++ ) {
rapidjson::Value& customer_obj = customer_array[i];
order.customerInfo.account = GetJsonStringSafe(customer_obj,"accountId"); order.customerInfo.account = GetJsonStringSafe(customer_obj,"accountId");
order.customerInfo.account_type = atoi(GetJsonStringSafe(customer_obj,"accountType")); order.customerInfo.account_type = atoi(GetJsonStringSafe(customer_obj,"accountType"));
order.customerInfo.account_level = GetJsonStringSafe(customer_obj,"level"); order.customerInfo.account_level = GetJsonStringSafe(customer_obj,"level");
...@@ -229,21 +172,22 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -229,21 +172,22 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
} }
} }
if (orderContent_obj.HasMember("appointmentVO")) if ( orderContent_obj.HasMember("appointmentVO") ) {
{
rapidjson::Value& appointment_obj = orderContent_obj["appointmentVO"]; rapidjson::Value& appointment_obj = orderContent_obj["appointmentVO"];
order.appointmentInfo.appointment_time = GetJsonStringSafe(appointment_obj, "appointmentTime"); order.appointmentInfo.appointment_time = GetJsonStringSafe(appointment_obj, "appointmentTime");
order.appointmentInfo.is_appointment = GetJsonIntSafe(appointment_obj, "isAppointment"); order.appointmentInfo.is_appointment = GetJsonIntSafe(appointment_obj, "isAppointment");
} }
//自配送 //自配送
if("2"==delivery_type){ if ( "2"==delivery_type ) {
order.delivery_price = GetJsonIntSafe(orderContent_obj,"deliveryFee"); order.delivery_price = GetJsonIntSafe(orderContent_obj,"deliveryFee");
order.total_price = GetJsonIntSafe(orderContent_obj,"totalAmount"); order.total_price = GetJsonIntSafe(orderContent_obj,"totalAmount");
} } else {
else{
order.delivery_price=0; order.delivery_price=0;
order.total_price = GetJsonIntSafe(orderContent_obj,"totalAmount")-GetJsonIntSafe(orderContent_obj,"deliveryFee"); order.total_price = GetJsonIntSafe(orderContent_obj,"totalAmount") - GetJsonIntSafe(orderContent_obj,"deliveryFee");
// 贝瑞第三方平台配送 区别全家处理逻辑,配送费需要显示实际配送费金额;
// order.delivery_price = GetJsonIntSafe(orderContent_obj, "deliveryFee");
// order.total_price = GetJsonIntSafe(orderContent_obj,"totalAmount") - GetJsonIntSafe(orderContent_obj, "deliveryFee");
} }
order.wmDiscount=GetJsonIntSafe(orderContent_obj,"wmDiscount"); order.wmDiscount=GetJsonIntSafe(orderContent_obj,"wmDiscount");
...@@ -251,43 +195,30 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -251,43 +195,30 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
order.wmSjSharedDiscount=GetJsonIntSafe(orderContent_obj,"wmSjSharedDiscount"); order.wmSjSharedDiscount=GetJsonIntSafe(orderContent_obj,"wmSjSharedDiscount");
order.totalCouponDiscount = GetJsonIntSafe(orderContent_obj, "totalCouponDiscount"); order.totalCouponDiscount = GetJsonIntSafe(orderContent_obj, "totalCouponDiscount");
order.totalExcessiveCharge = GetJsonIntSafe(orderContent_obj, "totalExcessiveCharge"); order.totalExcessiveCharge = GetJsonIntSafe(orderContent_obj, "totalExcessiveCharge");
//订单信息 //订单信息
if(orderContent_obj.HasMember("orders")) if ( orderContent_obj.HasMember("orders") ) {
{
rapidjson::Value& orders_obj = orderContent_obj["orders"]; rapidjson::Value& orders_obj = orderContent_obj["orders"];
order.deliveryInfo.status = atoi(GetJsonStringSafe(orders_obj,"deliveryStatus")); order.deliveryInfo.status = atoi(GetJsonStringSafe(orders_obj,"deliveryStatus"));
order.deliveryInfo.status_desc = GetJsonStringSafe(orders_obj,"deliveryStatusDesc"); order.deliveryInfo.status_desc = GetJsonStringSafe(orders_obj,"deliveryStatusDesc");
order.order_id = GetJsonStringSafe(orders_obj,"orderId"); order.order_id = GetJsonStringSafe(orders_obj,"orderId");
std::string pickupcode= GetJsonStringSafe(orders_obj,"pickupCode"); std::string pickupcode= GetJsonStringSafe(orders_obj,"pickupCode");
order.pickup_code= _getPickupCodeString(order.channel,pickupcode); order.pickup_code= _getPickupCodeString(order.channel,pickupcode);
order.pickup_point = GetJsonStringSafe(orders_obj,"pickupPoint"); order.pickup_point = GetJsonStringSafe(orders_obj,"pickupPoint");
order.remark = GetJsonStringSafe(orders_obj,"remark"); order.remark = GetJsonStringSafe(orders_obj,"remark");
order.isNeedTableware = GetJsonIntSafe(orders_obj, "isNeedTableware");
order.status = atoi(GetJsonStringSafe(orders_obj,"status")); order.status = atoi(GetJsonStringSafe(orders_obj,"status"));
order.ods_status=order.status; order.ods_status=order.status;
// int iCancelStatus = atoi(GetJsonStringSafe(orders_obj,"cancelStatus"));
// if(ODS_ORDERSTATUS_REFUND_FULL==iCancelStatus||ODS_ORDERSTATUS_REFUND_AGREE==iCancelStatus||ODS_ORDERSTATUS_REFUND_DISAGREE==iCancelStatus){
// order.status=iCancelStatus;
// order.ods_status=order.status;
// }
order.status_desc = GetJsonStringSafe(orders_obj,"statusDesc"); order.status_desc = GetJsonStringSafe(orders_obj,"statusDesc");
//订单商品 //订单商品
if(orders_obj.HasMember("products")) if ( orders_obj.HasMember("products") ) {
{
rapidjson::Value& products_array = orders_obj["products"]; rapidjson::Value& products_array = orders_obj["products"];
if(products_array.IsArray())
{
for(unsigned int i=0;i<products_array.Size();i++){
rapidjson::Value& product_obj = products_array[i];
if ( products_array.IsArray() ) {
for ( unsigned int i=0; i<products_array.Size(); i++ ) {
rapidjson::Value& product_obj = products_array[i];
productAttr structProduct; productAttr structProduct;
structProduct.pro.attributes = GetJsonStringSafe(product_obj,"attributes"); structProduct.pro.attributes = GetJsonStringSafe(product_obj,"attributes");
...@@ -303,14 +234,12 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -303,14 +234,12 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
structProduct.pro.couponQty = GetJsonIntSafe(product_obj, "couponQty"); structProduct.pro.couponQty = GetJsonIntSafe(product_obj, "couponQty");
//子商品信息 //子商品信息
if(product_obj.HasMember("specs")) if ( product_obj.HasMember("specs") ) {
{
rapidjson::Value& specs_array = product_obj["specs"]; rapidjson::Value& specs_array = product_obj["specs"];
if(specs_array.IsArray())
{
for(unsigned int i=0;i<specs_array.Size();i++){
rapidjson::Value& specs_obj = specs_array[i];
if ( specs_array.IsArray() ) {
for ( unsigned int i=0; i<specs_array.Size(); i++ ) {
rapidjson::Value& specs_obj = specs_array[i];
productSpec structProductSpec; productSpec structProductSpec;
structProductSpec.name = GetJsonStringSafe(specs_obj,"name"); structProductSpec.name = GetJsonStringSafe(specs_obj,"name");
structProductSpec.price = GetJsonIntSafe(specs_obj,"price"); structProductSpec.price = GetJsonIntSafe(specs_obj,"price");
...@@ -327,28 +256,22 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -327,28 +256,22 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
} }
} }
//支付信息 //支付信息
if(orderContent_obj.HasMember("payInfos")) if ( orderContent_obj.HasMember("payInfos") ) {
{
//sumary未映射字段值 //sumary未映射字段值
rapidjson::Value& payInfos_array = orderContent_obj["payInfos"]; rapidjson::Value& payInfos_array = orderContent_obj["payInfos"];
if(payInfos_array.IsArray())
{ if ( payInfos_array.IsArray() ) {
for(unsigned int i=0;i<payInfos_array.Size();i++){ for ( unsigned int i=0; i<payInfos_array.Size(); i++ ) {
rapidjson::Value& payInfos_obj = payInfos_array[i]; rapidjson::Value& payInfos_obj = payInfos_array[i];
paymentDetail detail; paymentDetail detail;
detail.amount = GetJsonIntSafe(payInfos_obj,"amount"); detail.amount = GetJsonIntSafe(payInfos_obj,"amount");
//非自配送且不是咖啡小程序订单,第一种支付方式减去配送费 //非自配送且不是咖啡小程序订单,第一种支付方式减去配送费
if("2" != delivery_type && 0==i && order.channel != "213"){ if ( "2" != delivery_type && 0==i && order.channel != "213" ) {
detail.amount = GetJsonIntSafe(payInfos_obj,"amount")-GetJsonIntSafe(orderContent_obj,"deliveryFee"); detail.amount = GetJsonIntSafe(payInfos_obj,"amount")-GetJsonIntSafe(orderContent_obj,"deliveryFee");
} }
//咖啡小程序订单,需要单独处理.支付类型为"10101"的金额,减去配送费 //咖啡小程序订单,需要单独处理.支付类型为"10101"的金额,减去配送费
std::string payType = GetJsonStringSafe(payInfos_obj, "payType"); std::string payType = GetJsonStringSafe(payInfos_obj, "payType");
if (order.channel == "213" && payType== "10101") {
detail.amount = GetJsonIntSafe(payInfos_obj, "amount") - GetJsonIntSafe(orderContent_obj, "deliveryFee");
}
//支付类型需要拼接 channel+payType //支付类型需要拼接 channel+payType
std::string _strType=order.channel+GetJsonStringSafe(payInfos_obj,"payType"); std::string _strType=order.channel+GetJsonStringSafe(payInfos_obj,"payType");
detail.type = atoi(_strType.data()); detail.type = atoi(_strType.data());
...@@ -364,24 +287,21 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -364,24 +287,21 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
GetJsonStringSafe(orderContent_obj,"payType"); GetJsonStringSafe(orderContent_obj,"payType");
//优惠信息 //优惠信息
if(orderContent_obj.HasMember("promotions")) if ( orderContent_obj.HasMember("promotions") ) {
{
rapidjson::Value& promotions_obj = orderContent_obj["promotions"]; rapidjson::Value& promotions_obj = orderContent_obj["promotions"];
if(promotions_obj.IsObject())
{ if ( promotions_obj.IsObject() ) {
GetJsonIntSafe(promotions_obj,"totalDiscount"); GetJsonIntSafe(promotions_obj,"totalDiscount");
GetJsonIntSafe(promotions_obj,"totalOriginalPrice"); GetJsonIntSafe(promotions_obj,"totalOriginalPrice");
GetJsonIntSafe(promotions_obj,"totalPromotionPrice"); GetJsonIntSafe(promotions_obj,"totalPromotionPrice");
//优惠信息详情 //优惠信息详情
if(promotions_obj.HasMember("promtionDetails")) if ( promotions_obj.HasMember("promtionDetails") ) {
{
rapidjson::Value& promtionDetails_array = promotions_obj["promtionDetails"]; rapidjson::Value& promtionDetails_array = promotions_obj["promtionDetails"];
if(promtionDetails_array.IsArray())
{
for(unsigned int i=0;i<promtionDetails_array.Size();i++){
rapidjson::Value& promtionDetails_obj = promtionDetails_array[i];
if ( promtionDetails_array.IsArray() ) {
for ( unsigned int i=0; i<promtionDetails_array.Size(); i++ ) {
rapidjson::Value& promtionDetails_obj = promtionDetails_array[i];
promotions detail; promotions detail;
detail.pcode = GetJsonStringSafe(promtionDetails_obj,"pcode"); detail.pcode = GetJsonStringSafe(promtionDetails_obj,"pcode");
detail.proType = GetJsonStringSafe(promtionDetails_obj,"type"); detail.proType = GetJsonStringSafe(promtionDetails_obj,"type");
...@@ -391,9 +311,9 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -391,9 +311,9 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
detail.originalPrice = GetJsonIntSafe(promtionDetails_obj,"originalPrice"); detail.originalPrice = GetJsonIntSafe(promtionDetails_obj,"originalPrice");
detail.promotionPrice = GetJsonIntSafe(promtionDetails_obj,"promotionPrice"); detail.promotionPrice = GetJsonIntSafe(promtionDetails_obj,"promotionPrice");
detail.discount = GetJsonIntSafe(promtionDetails_obj,"discount"); detail.discount = GetJsonIntSafe(promtionDetails_obj,"discount");
if(promtionDetails_obj.HasMember("gifts")){ if ( promtionDetails_obj.HasMember("gifts") ) {
rapidjson::Value& gifts_obj = orderContent_obj["gifts"]; rapidjson::Value& gifts_obj = orderContent_obj["gifts"];
if(gifts_obj.IsObject()){ if ( gifts_obj.IsObject() ) {
detail.giftSku = GetJsonStringSafe(gifts_obj,"sku"); detail.giftSku = GetJsonStringSafe(gifts_obj,"sku");
detail.giftQty = GetJsonIntSafe(gifts_obj,"qty"); detail.giftQty = GetJsonIntSafe(gifts_obj,"qty");
} }
...@@ -406,26 +326,29 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -406,26 +326,29 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
} }
//积分信息 //积分信息
if(orderContent_obj.HasMember("points")) if ( orderContent_obj.HasMember("points") ) {
{
rapidjson::Value& points_obj = orderContent_obj["points"]; rapidjson::Value& points_obj = orderContent_obj["points"];
if(points_obj.IsObject()) if ( points_obj.IsObject() ) {
{
order.bonus_total = GetJsonIntSafe(points_obj,"totalPoint"); order.bonus_total = GetJsonIntSafe(points_obj,"totalPoint");
order.bonus_extra = GetJsonIntSafe(points_obj, "extraPoint"); order.bonus_extra = GetJsonIntSafe(points_obj, "extraPoint");
order.bonus_basic = GetJsonIntSafe(points_obj, "basicPoint"); order.bonus_basic = GetJsonIntSafe(points_obj, "basicPoint");
order.bonus_extra_nkb = GetJsonIntSafe(points_obj, "nkbExtraPoint"); order.bonus_extra_nkb = GetJsonIntSafe(points_obj, "nkbExtraPoint");
order.bonus_basic_nkb = GetJsonIntSafe(points_obj, "nkbBasicPoint"); order.bonus_basic_nkb = GetJsonIntSafe(points_obj, "nkbBasicPoint");
order.zhxPoint = GetJsonIntSafe(points_obj, "zhxPoint"); order.zhxPoint = GetJsonIntSafe(points_obj, "zhxPoint");
// Berry 新增3个积分字段,全家模式下注释这3个字段;
//order.otherPoint = GetJsonIntSafe(points_obj, "otherBrandPoint");
//order.remainingBrandPoint = GetJsonIntSafe(points_obj, "remainingBrandPoint");
//order.remainingNkbPoint = GetJsonIntSafe(points_obj, "remainingNkbPoint");
//积分信息详情 //积分信息详情
if(points_obj.HasMember("pointDetails")) if ( points_obj.HasMember("pointDetails") ) {
{
rapidjson::Value& pointDetails_array = points_obj["pointDetails"]; rapidjson::Value& pointDetails_array = points_obj["pointDetails"];
if(pointDetails_array.IsArray())
{
for(unsigned int i=0;i<pointDetails_array.Size();i++){
rapidjson::Value& pointDetails_obj = pointDetails_array[i];
if ( pointDetails_array.IsArray() ) {
for ( unsigned int i=0; i<pointDetails_array.Size(); i++ ) {
rapidjson::Value& pointDetails_obj = pointDetails_array[i];
bonus detail; bonus detail;
detail.pcode = GetJsonStringSafe(pointDetails_obj,"pcode"); detail.pcode = GetJsonStringSafe(pointDetails_obj,"pcode");
detail.desc = GetJsonStringSafe(pointDetails_obj,"desc"); detail.desc = GetJsonStringSafe(pointDetails_obj,"desc");
...@@ -434,7 +357,7 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -434,7 +357,7 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
detail.sku = GetJsonStringSafe(pointDetails_obj,"sku"); detail.sku = GetJsonStringSafe(pointDetails_obj,"sku");
detail.proType = GetJsonStringSafe(pointDetails_obj,"type"); detail.proType = GetJsonStringSafe(pointDetails_obj,"type");
detail.qty = GetJsonIntSafe(pointDetails_obj, "qty"); detail.qty = GetJsonIntSafe(pointDetails_obj, "qty");
if("00"==detail.proType){ if ( "00"==detail.proType ) {
detail.proType="CP"; detail.proType="CP";
} }
...@@ -445,14 +368,11 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -445,14 +368,11 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
} }
} }
//电子点标 //电子点标
if(orderContent_obj.HasMember("ecouponVos")) if ( orderContent_obj.HasMember("ecouponVos") ) {
{
rapidjson::Value& ecouponVos_array = orderContent_obj["ecouponVos"]; rapidjson::Value& ecouponVos_array = orderContent_obj["ecouponVos"];
if(ecouponVos_array.IsArray()) if ( ecouponVos_array.IsArray() ) {
{ for ( unsigned int i=0; i<ecouponVos_array.Size(); i++ ) {
for(unsigned int i=0;i<ecouponVos_array.Size();i++){
rapidjson::Value& ecouponVos_obj = ecouponVos_array[i]; rapidjson::Value& ecouponVos_obj = ecouponVos_array[i];
ecoupon detail; ecoupon detail;
detail.ecouponNumber = GetJsonStringSafe(ecouponVos_obj,"couponNumber"); detail.ecouponNumber = GetJsonStringSafe(ecouponVos_obj,"couponNumber");
...@@ -470,12 +390,11 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -470,12 +390,11 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
order.reduced_price = GetJsonIntSafe(orderContent_obj,"totalDiscount"); order.reduced_price = GetJsonIntSafe(orderContent_obj,"totalDiscount");
//订单优惠券信息 //订单优惠券信息
if (orderContent_obj.HasMember("orderCoupons")) if ( orderContent_obj.HasMember("orderCoupons") ) {
{
rapidjson::Value& coupons_array = orderContent_obj["orderCoupons"]; rapidjson::Value& coupons_array = orderContent_obj["orderCoupons"];
if (!coupons_array.IsNull()) { if ( !coupons_array.IsNull() ) {
if (coupons_array.IsArray()) { if ( coupons_array.IsArray() ) {
for (unsigned int i = 0; i<coupons_array.Size(); i++) { for ( unsigned int i = 0; i<coupons_array.Size(); i++ ) {
rapidjson::Value& coupon_obj = coupons_array[i]; rapidjson::Value& coupon_obj = coupons_array[i];
orderCoupon coupon; orderCoupon coupon;
coupon.couponId = GetJsonStringSafe(coupon_obj, "couponId"); coupon.couponId = GetJsonStringSafe(coupon_obj, "couponId");
...@@ -504,21 +423,18 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -504,21 +423,18 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
} }
//第三方商户信息 //第三方商户信息
if(document.HasMember("sellerInfo")) if ( document.HasMember("sellerInfo") ) {
{
rapidjson::Value& sellerInfo_obj = document["sellerInfo"]; rapidjson::Value& sellerInfo_obj = document["sellerInfo"];
if(sellerInfo_obj.IsObject()) if ( sellerInfo_obj.IsObject() ) {
{
GetJsonStringSafe(sellerInfo_obj,"sellerId"); GetJsonStringSafe(sellerInfo_obj,"sellerId");
GetJsonStringSafe(sellerInfo_obj,"sellerName"); GetJsonStringSafe(sellerInfo_obj,"sellerName");
} }
} }
//门店信息 //门店信息
if(document.HasMember("shopInfo")) if ( document.HasMember("shopInfo") ) {
{
rapidjson::Value& shopInfo_obj = document["shopInfo"]; rapidjson::Value& shopInfo_obj = document["shopInfo"];
if(shopInfo_obj.IsObject()){ if ( shopInfo_obj.IsObject() ) {
GetJsonStringSafe(shopInfo_obj,"barCounter"); GetJsonStringSafe(shopInfo_obj,"barCounter");
GetJsonStringSafe(shopInfo_obj,"operator"); GetJsonStringSafe(shopInfo_obj,"operator");
order.storeInfo.pos_id = GetJsonStringSafe(shopInfo_obj,"posId"); order.storeInfo.pos_id = GetJsonStringSafe(shopInfo_obj,"posId");
...@@ -528,7 +444,7 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -528,7 +444,7 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
//自助机信息 //自助机信息
rapidjson::Value& selfHelpMac_obj = shopInfo_obj["selfHelpMac"]; rapidjson::Value& selfHelpMac_obj = shopInfo_obj["selfHelpMac"];
if(selfHelpMac_obj.IsObject()){ if ( selfHelpMac_obj.IsObject() ) {
order.storeInfo.vem_id = GetJsonStringSafe(selfHelpMac_obj,"id"); order.storeInfo.vem_id = GetJsonStringSafe(selfHelpMac_obj,"id");
order.storeInfo.vem_shelf = GetJsonStringSafe(selfHelpMac_obj,"shelf"); order.storeInfo.vem_shelf = GetJsonStringSafe(selfHelpMac_obj,"shelf");
} }
...@@ -539,7 +455,7 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order) ...@@ -539,7 +455,7 @@ bool JsonModule::getPushOrders(IN const char* json,OUT orderObj &order)
return true; return true;
} }
bool JsonModule::isInitData(const std::string &data) bool JsonModule::isInitData(IN const std::string &data)
{ {
rapidjson::Document document; // 定义一个Document对象 rapidjson::Document document; // 定义一个Document对象
document.Parse(data.c_str()); // 解析,Parse()无返回值,也不会抛异常 document.Parse(data.c_str()); // 解析,Parse()无返回值,也不会抛异常
...@@ -567,7 +483,7 @@ int JsonModule::isHeartbeatData(IN const char* data) ...@@ -567,7 +483,7 @@ int JsonModule::isHeartbeatData(IN const char* data)
return 2; return 2;
} }
bool JsonModule::checkInitData(const std::string &data, int &posListenPort) bool JsonModule::checkInitData(IN const std::string &data, OUT int &posListenPort)
{ {
rapidjson::Document document; // 定义一个Document对象 rapidjson::Document document; // 定义一个Document对象
document.Parse(data.c_str()); // 解析,Parse()无返回值,也不会抛异常 document.Parse(data.c_str()); // 解析,Parse()无返回值,也不会抛异常
...@@ -632,11 +548,13 @@ bool JsonModule::convertInitDataPos2Ods(IN const std::string& data, OUT std::str ...@@ -632,11 +548,13 @@ bool JsonModule::convertInitDataPos2Ods(IN const std::string& data, OUT std::str
writer.Key("ver"); writer.Key("ver");
writer.Int(1); writer.Int(1);
writer.Key("version");
writer.String(VERSION);
writer.EndObject(); writer.EndObject();
result = buffer.GetString(); result = buffer.GetString();
return true; return true;
} }
...@@ -661,9 +579,6 @@ bool JsonModule::getInitBackData(IN const char* inJson,OUT std::string& outJson) ...@@ -661,9 +579,6 @@ bool JsonModule::getInitBackData(IN const char* inJson,OUT std::string& outJson)
autoconfirm = GetJsonIntSafe(document,"orderConfirmType"); autoconfirm = GetJsonIntSafe(document,"orderConfirmType");
default_pos = GetJsonStringSafe(document,"orderPushPosIndex"); default_pos = GetJsonStringSafe(document,"orderPushPosIndex");
// if(document.HasMember("message")){
// msg = document["message"].GetString();
// }
if(status_code==100){ if(status_code==100){
msg="success"; msg="success";
} }
...@@ -713,7 +628,7 @@ bool JsonModule::isInitBackValid(IN const char* inJson) ...@@ -713,7 +628,7 @@ bool JsonModule::isInitBackValid(IN const char* inJson)
return false; return false;
} }
bool JsonModule::getPosResponseData(int status, const std::string &msg, std::string &result) bool JsonModule::getPosResponseData(IN int status, IN const std::string &msg, OUT std::string &result)
{ {
rapidjson::StringBuffer buffer; rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
...@@ -731,7 +646,7 @@ bool JsonModule::getPosResponseData(int status, const std::string &msg, std::str ...@@ -731,7 +646,7 @@ bool JsonModule::getPosResponseData(int status, const std::string &msg, std::str
return true; return true;
} }
bool JsonModule::getPosResponseData(const std::string &odsResponse,IN const std::string& posReq, std::string &result) bool JsonModule::getPosResponseData(IN const std::string &odsResponse, IN const std::string& posReq, OUT std::string &result)
{ {
bool rlt=false; bool rlt=false;
rapidjson::Document document; // 定义一个Document对象 rapidjson::Document document; // 定义一个Document对象
...@@ -780,19 +695,16 @@ std::string JsonModule::_convertToOrderOperationReponseJson(IN const char* json) ...@@ -780,19 +695,16 @@ std::string JsonModule::_convertToOrderOperationReponseJson(IN const char* json)
if (document.HasParseError()) // 通过HasParseError()来判断解析是否成功 if (document.HasParseError()) // 通过HasParseError()来判断解析是否成功
{ {
LOG(ERROR)<<"_convertToOrderOperationReponseJson JSON parse error:"<<document.GetParseError()<<":"<<document.GetErrorOffset(); LOG(ERROR)<<"_convertToOrderOperationReponseJson JSON parse error:"<<document.GetParseError()<<":"<<document.GetErrorOffset();
}
else } else {
{
std::string code = document["code"].GetString(); std::string code = document["code"].GetString();
status_code=atoi(code.c_str()); status_code=atoi(code.c_str());
msg = GetJsonStringSafe(document,"message"); msg = GetJsonStringSafe(document,"message");
if(document.HasMember("result")) if(document.HasMember("result")) {
{
rapidjson::Value& result_obj = document["result"]; rapidjson::Value& result_obj = document["result"];
if(result_obj.IsObject())
{ if(result_obj.IsObject()) {
int iStatus=atoi(GetJsonStringSafe(result_obj,"status")); int iStatus=atoi(GetJsonStringSafe(result_obj,"status"));
status = _getPOSOrderStatus(iStatus); status = _getPOSOrderStatus(iStatus);
status_desc = GetJsonStringSafe(result_obj,"statusDesc"); status_desc = GetJsonStringSafe(result_obj,"statusDesc");
...@@ -821,7 +733,7 @@ std::string JsonModule::_convertToOrderOperationReponseJson(IN const char* json) ...@@ -821,7 +733,7 @@ std::string JsonModule::_convertToOrderOperationReponseJson(IN const char* json)
return buffer.GetString(); return buffer.GetString();
} }
bool JsonModule::getOdsResponseData(int status_code, const std::string &msg, IN const std::string& odsData, std::string &result) bool JsonModule::getOdsResponseData(IN int status_code, IN const std::string &msg, IN const std::string& odsData, OUT std::string &result)
{ {
rapidjson::Document document; rapidjson::Document document;
document.Parse(odsData.c_str()); document.Parse(odsData.c_str());
...@@ -927,7 +839,7 @@ bool JsonModule::getOdsResponseData(int status_code, const std::string &msg, IN ...@@ -927,7 +839,7 @@ bool JsonModule::getOdsResponseData(int status_code, const std::string &msg, IN
return rlt; return rlt;
} }
bool JsonModule::convertDataPos2Ods(const std::string &data, std::string &result) bool JsonModule::convertDataPos2Ods(IN const std::string &data, OUT std::string &result)
{ {
if( data.empty()){ if( data.empty()){
LOG(INFO)<<"convertDataPos2Ods empty input"; LOG(INFO)<<"convertDataPos2Ods empty input";
...@@ -986,7 +898,7 @@ bool JsonModule::convertDataPos2Ods(const std::string &data, std::string &result ...@@ -986,7 +898,7 @@ bool JsonModule::convertDataPos2Ods(const std::string &data, std::string &result
return rlt; return rlt;
} }
bool JsonModule::convertDataOds2Pos(const std::string &data, std::string &result) bool JsonModule::convertDataOds2Pos(IN const std::string &data, OUT std::string &result)
{ {
bool rlt=true; bool rlt=true;
int pushType=getPushType(data.c_str()); int pushType=getPushType(data.c_str());
...@@ -1024,92 +936,66 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1024,92 +936,66 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
writer.Key("fm_cmd"); writer.Key("fm_cmd");
writer.Int(REQUEST_TYPE_NEWORDER_PUSH); writer.Int(REQUEST_TYPE_NEWORDER_PUSH);
writer.Key("channel"); writer.Key("channel");
writer.String(obj.channel.c_str()); writer.String(obj.channel.c_str());
writer.Key("offline_bonus"); writer.Key("offline_bonus");
writer.Bool(obj.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);
writer.Key("order_id"); writer.Key("order_id");
writer.String(obj.order_id.c_str()); writer.String(obj.order_id.c_str());
writer.Key("create_time"); writer.Key("create_time");
writer.String(obj.create_time.c_str()); writer.String(obj.create_time.c_str());
writer.Key("delivery_time"); writer.Key("delivery_time");
writer.String(obj.delivery_time.c_str()); writer.String(obj.delivery_time.c_str());
writer.Key("status"); writer.Key("status");
writer.Int(_getPOSOrderStatus(obj.status)); writer.Int(_getPOSOrderStatus(obj.status));
writer.Key("ods_status"); writer.Key("ods_status");
writer.Int(obj.ods_status); writer.Int(obj.ods_status);
writer.Key("status_desc"); writer.Key("status_desc");
writer.String(obj.status_desc.c_str()); writer.String(obj.status_desc.c_str());
writer.Key("remark"); writer.Key("remark");
writer.String(obj.remark.c_str()); writer.String(obj.remark.c_str());
writer.Key("isNeedTableware");
writer.Int(obj.isNeedTableware);
writer.Key("total_price"); writer.Key("total_price");
writer.Int(obj.total_price); writer.Int(obj.total_price);
writer.Key("delivery_price"); writer.Key("delivery_price");
writer.Int(obj.delivery_price); writer.Int(obj.delivery_price);
writer.Key("reduced_price"); writer.Key("reduced_price");
writer.Int(obj.reduced_price); writer.Int(obj.reduced_price);
writer.Key("wmDiscount"); writer.Key("wmDiscount");
writer.Int(obj.wmDiscount); writer.Int(obj.wmDiscount);
writer.Key("wmPtSharedDiscount"); writer.Key("wmPtSharedDiscount");
writer.Int(obj.wmPtSharedDiscount); writer.Int(obj.wmPtSharedDiscount);
writer.Key("wmSjSharedDiscount"); writer.Key("wmSjSharedDiscount");
writer.Int(obj.wmSjSharedDiscount); writer.Int(obj.wmSjSharedDiscount);
writer.Key("pickup_code"); writer.Key("pickup_code");
writer.String(obj.pickup_code.c_str()); writer.String(obj.pickup_code.c_str());
writer.Key("pickup_point"); writer.Key("pickup_point");
writer.String(obj.pickup_point.c_str()); writer.String(obj.pickup_point.c_str());
writer.Key("invoice_pickup_code"); writer.Key("invoice_pickup_code");
writer.String(obj.invoice_pickup_code.c_str()); writer.String(obj.invoice_pickup_code.c_str());
writer.Key("order_drift"); writer.Key("order_drift");
writer.String(obj.order_drift.c_str()); writer.String(obj.order_drift.c_str());
writer.Key("totalCouponDiscount"); writer.Key("totalCouponDiscount");
writer.Int(obj.totalCouponDiscount); writer.Int(obj.totalCouponDiscount);
writer.Key("totalExcessiveCharge"); writer.Key("totalExcessiveCharge");
writer.Int(obj.totalExcessiveCharge); writer.Int(obj.totalExcessiveCharge);
//----------------门店信息---------------- //----------------门店信息----------------
writer.Key("store"); writer.Key("store");
writer.StartObject(); writer.StartObject();
writer.Key("store_id"); writer.Key("store_id");
writer.String(obj.storeInfo.store_id.c_str()); writer.String(obj.storeInfo.store_id.c_str());
writer.Key("pos_id"); writer.Key("pos_id");
writer.String(obj.storeInfo.pos_id.c_str()); writer.String(obj.storeInfo.pos_id.c_str());
writer.Key("vem_id"); writer.Key("vem_id");
writer.String(obj.storeInfo.vem_id.c_str()); writer.String(obj.storeInfo.vem_id.c_str());
writer.Key("vem_shelf"); writer.Key("vem_shelf");
writer.String(obj.storeInfo.vem_shelf.c_str()); writer.String(obj.storeInfo.vem_shelf.c_str());
writer.Key("store_type"); writer.Key("store_type");
writer.String(obj.storeInfo.store_type.c_str()); writer.String(obj.storeInfo.store_type.c_str());
writer.Key("child_store_id"); writer.Key("child_store_id");
writer.String(obj.storeInfo.child_store_id.c_str()); writer.String(obj.storeInfo.child_store_id.c_str());
...@@ -1122,16 +1008,12 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1122,16 +1008,12 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
writer.Key("type"); writer.Key("type");
writer.String(obj.deliveryInfo.type.c_str()); writer.String(obj.deliveryInfo.type.c_str());
writer.Key("status"); writer.Key("status");
writer.Int(obj.deliveryInfo.status); writer.Int(obj.deliveryInfo.status);
writer.Key("status_desc"); writer.Key("status_desc");
writer.String(obj.deliveryInfo.status_desc.c_str()); writer.String(obj.deliveryInfo.status_desc.c_str());
writer.Key("driver_name"); writer.Key("driver_name");
writer.String(obj.deliveryInfo.driver_name.c_str()); writer.String(obj.deliveryInfo.driver_name.c_str());
writer.Key("driver_phone"); writer.Key("driver_phone");
writer.String(obj.deliveryInfo.driver_phone.c_str()); writer.String(obj.deliveryInfo.driver_phone.c_str());
...@@ -1144,7 +1026,6 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1144,7 +1026,6 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
writer.Key("appointment_time"); writer.Key("appointment_time");
writer.String(obj.appointmentInfo.appointment_time.c_str()); writer.String(obj.appointmentInfo.appointment_time.c_str());
writer.Key("is_appointment"); writer.Key("is_appointment");
writer.Int(obj.appointmentInfo.is_appointment); writer.Int(obj.appointmentInfo.is_appointment);
...@@ -1157,22 +1038,16 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1157,22 +1038,16 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
writer.Key("name"); writer.Key("name");
writer.String(obj.customerInfo.name.c_str()); writer.String(obj.customerInfo.name.c_str());
writer.Key("phone"); writer.Key("phone");
writer.String(obj.customerInfo.phone.c_str()); writer.String(obj.customerInfo.phone.c_str());
writer.Key("address"); writer.Key("address");
writer.String(obj.customerInfo.address.c_str()); writer.String(obj.customerInfo.address.c_str());
writer.Key("account"); writer.Key("account");
writer.String(obj.customerInfo.account.c_str()); writer.String(obj.customerInfo.account.c_str());
writer.Key("account_type"); writer.Key("account_type");
writer.Int(obj.customerInfo.account_type); writer.Int(obj.customerInfo.account_type);
writer.Key("account_level"); writer.Key("account_level");
writer.String(obj.customerInfo.account_level.c_str()); writer.String(obj.customerInfo.account_level.c_str());
writer.Key("card_no"); writer.Key("card_no");
writer.String(obj.customerInfo.card_no.c_str()); writer.String(obj.customerInfo.card_no.c_str());
...@@ -1183,60 +1058,44 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1183,60 +1058,44 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
writer.Key("products"); writer.Key("products");
writer.StartArray(); writer.StartArray();
for(unsigned int i=0;i<obj.vecProducts.size();i++) for ( unsigned int i=0; i<obj.vecProducts.size(); i++ ) {
{
//-----------------start 单个商品------------------ //-----------------start 单个商品------------------
writer.StartObject(); writer.StartObject();
writer.Key("source"); writer.Key("source");
writer.String(obj.vecProducts[i].pro.source.c_str()); writer.String(obj.vecProducts[i].pro.source.c_str());
writer.Key("attributes"); writer.Key("attributes");
writer.String(obj.vecProducts[i].pro.attributes.c_str()); writer.String(obj.vecProducts[i].pro.attributes.c_str());
writer.Key("combo_id"); writer.Key("combo_id");
writer.String(obj.vecProducts[i].pro.combo_id.c_str()); writer.String(obj.vecProducts[i].pro.combo_id.c_str());
writer.Key("bom_id"); writer.Key("bom_id");
writer.String(obj.vecProducts[i].pro.bom_id.c_str()); writer.String(obj.vecProducts[i].pro.bom_id.c_str());
writer.Key("bag_id"); writer.Key("bag_id");
writer.String(obj.vecProducts[i].pro.bag_id.c_str()); writer.String(obj.vecProducts[i].pro.bag_id.c_str());
writer.Key("name"); writer.Key("name");
writer.String(obj.vecProducts[i].pro.name.c_str()); writer.String(obj.vecProducts[i].pro.name.c_str());
writer.Key("original_price"); writer.Key("original_price");
writer.Int(obj.vecProducts[i].pro.original_price); writer.Int(obj.vecProducts[i].pro.original_price);
writer.Key("price"); writer.Key("price");
writer.Int(obj.vecProducts[i].pro.price); writer.Int(obj.vecProducts[i].pro.price);
writer.Key("qty"); writer.Key("qty");
writer.Int(obj.vecProducts[i].pro.qty); writer.Int(obj.vecProducts[i].pro.qty);
writer.Key("sku"); writer.Key("sku");
writer.String(obj.vecProducts[i].pro.sku.c_str()); writer.String(obj.vecProducts[i].pro.sku.c_str());
writer.Key("couponQty"); writer.Key("couponQty");
writer.Int(obj.vecProducts[i].pro.couponQty); writer.Int(obj.vecProducts[i].pro.couponQty);
//-----------------start 商品规格------------------ //-----------------start 商品规格------------------
writer.Key("specs"); writer.Key("specs");
writer.StartArray(); writer.StartArray();
for(unsigned int j=0;j<obj.vecProducts[i].vecSpec.size();j++) for ( unsigned int j=0; j<obj.vecProducts[i].vecSpec.size(); j++ ) {
{
writer.StartObject(); writer.StartObject();
writer.Key("name"); writer.Key("name");
writer.String(obj.vecProducts[i].vecSpec[j].name.c_str()); writer.String(obj.vecProducts[i].vecSpec[j].name.c_str());
writer.Key("price"); writer.Key("price");
writer.Int(obj.vecProducts[i].vecSpec[j].price); writer.Int(obj.vecProducts[i].vecSpec[j].price);
writer.Key("qty"); writer.Key("qty");
writer.Int(obj.vecProducts[i].vecSpec[j].qty); writer.Int(obj.vecProducts[i].vecSpec[j].qty);
writer.Key("sku"); writer.Key("sku");
writer.String(obj.vecProducts[i].vecSpec[j].sku.c_str()); writer.String(obj.vecProducts[i].vecSpec[j].sku.c_str());
...@@ -1258,26 +1117,21 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1258,26 +1117,21 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
writer.Key("summary"); writer.Key("summary");
writer.String(obj.payInfo.summary.c_str()); writer.String(obj.payInfo.summary.c_str());
//-----------------start 付款详情------------------ //-----------------start 付款详情------------------
writer.Key("details"); writer.Key("details");
writer.StartArray(); writer.StartArray();
for(unsigned int i=0;i<obj.payInfo.vecDetail.size();i++)
{ for ( unsigned int i=0; i<obj.payInfo.vecDetail.size(); i++ ) {
writer.StartObject(); writer.StartObject();
writer.Key("amount"); writer.Key("amount");
writer.Int(obj.payInfo.vecDetail[i].amount); writer.Int(obj.payInfo.vecDetail[i].amount);
writer.Key("type"); writer.Key("type");
writer.Int(obj.payInfo.vecDetail[i].type); writer.Int(obj.payInfo.vecDetail[i].type);
writer.Key("trans_id"); writer.Key("trans_id");
writer.String(obj.payInfo.vecDetail[i].trans_id.c_str()); writer.String(obj.payInfo.vecDetail[i].trans_id.c_str());
writer.Key("account_id"); writer.Key("account_id");
writer.String(obj.payInfo.vecDetail[i].account_id.c_str()); writer.String(obj.payInfo.vecDetail[i].account_id.c_str());
writer.Key("pay_code"); writer.Key("pay_code");
writer.String(obj.payInfo.vecDetail[i].pay_code.c_str()); writer.String(obj.payInfo.vecDetail[i].pay_code.c_str());
...@@ -1285,7 +1139,6 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1285,7 +1139,6 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
} }
writer.EndArray(); writer.EndArray();
//-----------------end 付款详情-------------------- //-----------------end 付款详情--------------------
writer.EndObject(); writer.EndObject();
//----------------付款明细 结束----------- //----------------付款明细 结束-----------
...@@ -1294,45 +1147,43 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1294,45 +1147,43 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
writer.Int(obj.bonus_basic); writer.Int(obj.bonus_basic);
writer.Key("bonusExtra"); writer.Key("bonusExtra");
writer.Int(obj.bonus_extra); writer.Int(obj.bonus_extra);
writer.Key("nkbBonusBasic"); writer.Key("nkbBonusBasic");
writer.Int(obj.bonus_basic_nkb); writer.Int(obj.bonus_basic_nkb);
writer.Key("nkbBonusExtra"); writer.Key("nkbBonusExtra");
writer.Int(obj.bonus_extra_nkb); writer.Int(obj.bonus_extra_nkb);
writer.Key("bonusTotal"); writer.Key("bonusTotal");
writer.Int(obj.bonus_total); writer.Int(obj.bonus_total);
writer.Key("zhxPoint"); writer.Key("zhxPoint");
writer.Int(obj.zhxPoint); writer.Int(obj.zhxPoint);
// Berry 新增3个积分字段,全家模式下注释这3个字段;
/*
writer.Key("otherPoint");
writer.Int(obj.otherPoint);
writer.Key("remainingBrandPoint");
writer.Int(obj.remainingBrandPoint);
writer.Key("remainingNkbPoint");
writer.Int(obj.remainingNkbPoint);
*/
writer.Key("bonus"); writer.Key("bonus");
writer.StartArray(); writer.StartArray();
for(unsigned int i=0;i<obj.vecBonus.size();i++) for ( unsigned int i=0; i<obj.vecBonus.size(); i++ ) {
{
writer.StartObject(); writer.StartObject();
writer.Key("pcode"); writer.Key("pcode");
writer.String(obj.vecBonus[i].pcode.c_str()); writer.String(obj.vecBonus[i].pcode.c_str());
writer.Key("proType"); writer.Key("proType");
writer.String(obj.vecBonus[i].proType.c_str()); writer.String(obj.vecBonus[i].proType.c_str());
writer.Key("type"); writer.Key("type");
writer.String(obj.vecBonus[i].type.c_str()); writer.String(obj.vecBonus[i].type.c_str());
writer.Key("desc"); writer.Key("desc");
writer.String(obj.vecBonus[i].desc.c_str()); writer.String(obj.vecBonus[i].desc.c_str());
writer.Key("name"); writer.Key("name");
writer.String(obj.vecBonus[i].name.c_str()); writer.String(obj.vecBonus[i].name.c_str());
writer.Key("sku"); writer.Key("sku");
writer.String(obj.vecBonus[i].sku.c_str()); writer.String(obj.vecBonus[i].sku.c_str());
writer.Key("bonus"); writer.Key("bonus");
writer.Int(obj.vecBonus[i].bonusNum); writer.Int(obj.vecBonus[i].bonusNum);
writer.Key("qty"); writer.Key("qty");
writer.Int(obj.vecBonus[i].qty); writer.Int(obj.vecBonus[i].qty);
...@@ -1344,43 +1195,31 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1344,43 +1195,31 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
//----------------促销---------------- //----------------促销----------------
writer.Key("promotions"); writer.Key("promotions");
writer.StartArray(); writer.StartArray();
for(unsigned int i=0;i<obj.vecPromotions.size();i++) for ( unsigned int i=0; i<obj.vecPromotions.size(); i++ ) {
{
writer.StartObject(); writer.StartObject();
writer.Key("pcode"); writer.Key("pcode");
writer.String(obj.vecPromotions[i].pcode.c_str()); writer.String(obj.vecPromotions[i].pcode.c_str());
writer.Key("proType"); writer.Key("proType");
writer.String(obj.vecPromotions[i].proType.c_str()); writer.String(obj.vecPromotions[i].proType.c_str());
writer.Key("type"); writer.Key("type");
writer.String(obj.vecPromotions[i].type.c_str()); writer.String(obj.vecPromotions[i].type.c_str());
writer.Key("desc"); writer.Key("desc");
writer.String(obj.vecPromotions[i].desc.c_str()); writer.String(obj.vecPromotions[i].desc.c_str());
writer.Key("name"); writer.Key("name");
writer.String(obj.vecPromotions[i].name.c_str()); writer.String(obj.vecPromotions[i].name.c_str());
writer.Key("sku"); writer.Key("sku");
writer.String(obj.vecPromotions[i].sku.c_str()); writer.String(obj.vecPromotions[i].sku.c_str());
writer.Key("originalPrice"); writer.Key("originalPrice");
writer.Int(obj.vecPromotions[i].originalPrice); writer.Int(obj.vecPromotions[i].originalPrice);
writer.Key("discount"); writer.Key("discount");
writer.Int(obj.vecPromotions[i].discount); writer.Int(obj.vecPromotions[i].discount);
writer.Key("promotionPrice"); writer.Key("promotionPrice");
writer.Int(obj.vecPromotions[i].promotionPrice); writer.Int(obj.vecPromotions[i].promotionPrice);
writer.Key("giftSku"); writer.Key("giftSku");
writer.String(obj.vecPromotions[i].giftSku.c_str()); writer.String(obj.vecPromotions[i].giftSku.c_str());
writer.Key("giftQty"); writer.Key("giftQty");
writer.Int(obj.vecPromotions[i].giftQty); writer.Int(obj.vecPromotions[i].giftQty);
writer.Key("couponId"); writer.Key("couponId");
writer.String(obj.vecPromotions[i].couponId.c_str()); writer.String(obj.vecPromotions[i].couponId.c_str());
...@@ -1392,31 +1231,23 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1392,31 +1231,23 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
//----------------电子点标---------------- //----------------电子点标----------------
writer.Key("ecoupon"); writer.Key("ecoupon");
writer.StartArray(); writer.StartArray();
for(unsigned int i=0;i<obj.vecEcoupon.size();i++) for ( unsigned int i=0; i<obj.vecEcoupon.size(); i++ ) {
{
writer.StartObject(); writer.StartObject();
writer.Key("pcode"); writer.Key("pcode");
writer.String(obj.vecEcoupon[i].pcode.c_str()); writer.String(obj.vecEcoupon[i].pcode.c_str());
writer.Key("proType"); writer.Key("proType");
writer.String(obj.vecEcoupon[i].proType.c_str()); writer.String(obj.vecEcoupon[i].proType.c_str());
writer.Key("type"); writer.Key("type");
writer.String(obj.vecEcoupon[i].type.c_str()); writer.String(obj.vecEcoupon[i].type.c_str());
writer.Key("desc"); writer.Key("desc");
writer.String(obj.vecEcoupon[i].desc.c_str()); writer.String(obj.vecEcoupon[i].desc.c_str());
writer.Key("name"); writer.Key("name");
writer.String(obj.vecEcoupon[i].name.c_str()); writer.String(obj.vecEcoupon[i].name.c_str());
writer.Key("sku"); writer.Key("sku");
writer.String(obj.vecEcoupon[i].sku.c_str()); writer.String(obj.vecEcoupon[i].sku.c_str());
writer.Key("ecouponNumber"); writer.Key("ecouponNumber");
writer.String(obj.vecEcoupon[i].ecouponNumber.c_str()); writer.String(obj.vecEcoupon[i].ecouponNumber.c_str());
writer.Key("ecouponQty"); writer.Key("ecouponQty");
writer.Int(obj.vecEcoupon[i].ecouponQty); writer.Int(obj.vecEcoupon[i].ecouponQty);
...@@ -1428,58 +1259,41 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1428,58 +1259,41 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
//----------------订单优惠券信息----------- //----------------订单优惠券信息-----------
writer.Key("orderCoupons"); writer.Key("orderCoupons");
writer.StartArray(); writer.StartArray();
for (unsigned int i = 0; i<obj.vecOrderCoupons.size(); i++) for ( unsigned int i = 0; i<obj.vecOrderCoupons.size(); i++ ) {
{
writer.StartObject(); writer.StartObject();
writer.Key("couponId"); writer.Key("couponId");
writer.String(obj.vecOrderCoupons[i].couponId.c_str()); writer.String(obj.vecOrderCoupons[i].couponId.c_str());
writer.Key("couponName"); writer.Key("couponName");
writer.String(obj.vecOrderCoupons[i].couponName.c_str()); writer.String(obj.vecOrderCoupons[i].couponName.c_str());
writer.Key("ebcode"); writer.Key("ebcode");
writer.String(obj.vecOrderCoupons[i].ebcode.c_str()); writer.String(obj.vecOrderCoupons[i].ebcode.c_str());
writer.Key("securitiesTrader"); writer.Key("securitiesTrader");
writer.String(obj.vecOrderCoupons[i].securitiesTrader.c_str()); writer.String(obj.vecOrderCoupons[i].securitiesTrader.c_str());
writer.Key("transNum"); writer.Key("transNum");
writer.String(obj.vecOrderCoupons[i].transNum.c_str()); writer.String(obj.vecOrderCoupons[i].transNum.c_str());
writer.Key("type"); writer.Key("type");
writer.String(obj.vecOrderCoupons[i].type.c_str()); writer.String(obj.vecOrderCoupons[i].type.c_str());
writer.Key("discount"); writer.Key("discount");
writer.Int(obj.vecOrderCoupons[i].discount); writer.Int(obj.vecOrderCoupons[i].discount);
writer.Key("totalAmount"); writer.Key("totalAmount");
writer.Int(obj.vecOrderCoupons[i].totalAmount); writer.Int(obj.vecOrderCoupons[i].totalAmount);
writer.Key("useAmount"); writer.Key("useAmount");
writer.Int(obj.vecOrderCoupons[i].useAmount); writer.Int(obj.vecOrderCoupons[i].useAmount);
writer.Key("usedNum"); writer.Key("usedNum");
writer.Int(obj.vecOrderCoupons[i].usedNum); writer.Int(obj.vecOrderCoupons[i].usedNum);
writer.Key("sku"); writer.Key("sku");
writer.String(obj.vecOrderCoupons[i].sku.c_str()); writer.String(obj.vecOrderCoupons[i].sku.c_str());
writer.Key("price"); writer.Key("price");
writer.Int(obj.vecOrderCoupons[i].price); writer.Int(obj.vecOrderCoupons[i].price);
writer.Key("campaignAmt"); writer.Key("campaignAmt");
writer.Int(obj.vecOrderCoupons[i].campaignAmt); writer.Int(obj.vecOrderCoupons[i].campaignAmt);
writer.Key("paid"); writer.Key("paid");
writer.Int(obj.vecOrderCoupons[i].paid); writer.Int(obj.vecOrderCoupons[i].paid);
writer.Key("remainingAmt"); writer.Key("remainingAmt");
writer.Int(obj.vecOrderCoupons[i].remainingAmt); writer.Int(obj.vecOrderCoupons[i].remainingAmt);
writer.Key("supplierNo"); writer.Key("supplierNo");
writer.String(obj.vecOrderCoupons[i].supplierNo.c_str()); writer.String(obj.vecOrderCoupons[i].supplierNo.c_str());
writer.Key("activityId"); writer.Key("activityId");
writer.String(obj.vecOrderCoupons[i].activityId.c_str()); writer.String(obj.vecOrderCoupons[i].activityId.c_str());
...@@ -1490,7 +1304,6 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj) ...@@ -1490,7 +1304,6 @@ std::string JsonModule::_convertToNewOrderJson(orderObj &obj)
writer.EndObject(); writer.EndObject();
LOG(INFO) << "POS ===>> PLUGIN" << buffer.GetString();
return buffer.GetString(); return buffer.GetString();
} }
...@@ -1676,10 +1489,10 @@ std::string JsonModule::_getDeliveryTypeString(int type) ...@@ -1676,10 +1489,10 @@ std::string JsonModule::_getDeliveryTypeString(int type)
switch(type) switch(type)
{ {
case ODS_DELIVERY_TYPE_SELF: case ODS_DELIVERY_TYPE_SELF:
rlt=DELIVERY_TYPE_SELF; rlt=DELIVERY_T_SELF;
break; break;
case ODS_DELIVERY_TYPE_PLATFORM: case ODS_DELIVERY_TYPE_PLATFORM:
rlt=DELIVERY_TYPE_PLATFORM; rlt=DELIVERY_T_PLATFORM;
break; break;
default: default:
break; break;
...@@ -1692,86 +1505,86 @@ int JsonModule::_getPOSOrderStatus(int status) ...@@ -1692,86 +1505,86 @@ int JsonModule::_getPOSOrderStatus(int status)
int rltStatus=0; int rltStatus=0;
switch(status) switch(status)
{ {
case ODS_ORDERSTATUS_NEW: case ODS_OS_NEW:
rltStatus=ORDERSTATUS_NEW; rltStatus= P_OS_NEW;
break; break;
case ODS_ORDERSTATUS_CONFIRMED: case ODS_OS_CONFIRMED:
rltStatus=ORDERSTATUS_CONFIRMED; rltStatus= P_OS_CONFIRMED;
break; break;
case ODS_ORDERSTATUS_CANCELED: case ODS_OS_CANCELED:
rltStatus=ORDERSTATUS_CANCELED; rltStatus= P_OS_CANCELED;
break; break;
case ODS_ORDERSTATUS_SHIPPING: case ODS_OS_SHIPPING:
rltStatus=ORDERSTATUS_SHIPPING; rltStatus= P_OS_SHIPPING;
break; break;
case ODS_ORDERSTATUS_WAIT_SHIPPING: case ODS_OS_WAIT_SHIPPING:
rltStatus=ORDERSTATUS_CONFIRMED; rltStatus= P_OS_CONFIRMED;
break; break;
case ODS_ORDERSTATUS_COMPLETE: case ODS_OS_COMPLETE:
rltStatus=ORDERSTATUS_COMPLETE; rltStatus= P_OS_COMPLETE;
break; break;
case ODS_ORDERSTATUS_DONE: case ODS_OS_DONE:
rltStatus=ORDERSTATUS_COMPLETE; rltStatus= P_OS_COMPLETE;
break; break;
case ODS_ORDERSTATUS_REFUND_FULL: case ODS_OS_REFUND_FULL:
rltStatus=ORDERSTATUS_REFUND_FULL; rltStatus= P_OS_REFUND_FULL;
break; break;
case ODS_ORDERSTATUS_REFUND_PART: case ODS_OS_REFUND_PART:
rltStatus=ORDERSTATUS_REFUND_PART; rltStatus= P_OS_REFUND_PART;
break; break;
case ODS_ORDERSTATUS_REFUND_COMPLETE: case ODS_OS_REFUND_COMPLETE:
rltStatus=ORDERSTATUS_REFUND_COMPLETE; rltStatus= P_OS_REFUND_COMPLETE;
break; break;
case ODS_ORDERSTATUS_LOCK: case ODS_OS_LOCK:
rltStatus=ORDERSTATUS_REFUND_FULL; rltStatus= P_OS_REFUND_FULL;
break; break;
case ODS_ORDERSTATUS_CANCELED_TIMEOUT: case ODS_OS_CANCELED_TIMEOUT:
rltStatus=ORDERSTATUS_CANCELED; rltStatus= P_OS_CANCELED;
break; break;
case ODS_ORDERSTATUS_CANCELED_USER: case ODS_OS_CANCELED_USER:
rltStatus=ORDERSTATUS_CANCELED; rltStatus= P_OS_CANCELED;
break; break;
case ODS_ORDERSTATUS_CANCELED_KEFU: case ODS_OS_CANCELED_KEFU:
rltStatus=ORDERSTATUS_CANCELED; rltStatus= P_OS_CANCELED;
break; break;
case ODS_ORDERSTATUS_CANCELED_SYS: case ODS_OS_CANCELED_SYS:
rltStatus=ORDERSTATUS_CANCELED; rltStatus= P_OS_CANCELED;
break; break;
case ODS_ORDERSTATUS_CANCELED_OTHER: case ODS_OS_CANCELED_OTHER:
rltStatus=ORDERSTATUS_CANCELED; rltStatus= P_OS_CANCELED;
break; break;
case ODS_ORDERSTATUS_APPOINTMENT_PAID: case ODS_OS_APPOINTMENT_PAID:
rltStatus = ORDERSTATUS_APPOINTMENT_PAID; rltStatus = P_OS_APPOINTMENT_PAID;
break; break;
case ODS_ORDERSTATUS_APPOINTMENT_REFUND: case ODS_OS_APPOINTMENT_REFUND:
rltStatus = ORDERSTATUS_APPOINTMENT_REFUND; rltStatus = P_OS_APPOINTMENT_REFUND;
break; break;
case ODS_ORDERSTATUS_SCANCODE_PAID: case ODS_OS_SCANCODE_PAID:
rltStatus = ORDERSTATUS_SCANCODE_PAID; rltStatus = P_OS_SCANCODE_PAID;
break; break;
case ODS_ORDERSTATUS_COFFEE_CANCEL: case ODS_OS_COF_CANCEL:
rltStatus = ORDERSTATUS_CANCELED; rltStatus = P_OS_CANCELED;
break; break;
case ODS_ORDERSTATUS_COFFEE_TIMEOUT_CANCEL: case ODS_OS_COF_TIMEOUT_CANCEL:
rltStatus = ORDERSTATUS_CANCELED; rltStatus = P_OS_CANCELED;
break; break;
case ODS_ORDERSTATUS_COFFEE_PAID: case ODS_OS_COF_PAID:
rltStatus = ORDERSTATUS_NEW; rltStatus = P_OS_NEW;
break; break;
case ODS_ORDERSTATUS_COFFEE_REFUND_USER: case ODS_OS_COF_REFUND_USER:
rltStatus = ORDERSTATUS_REFUND_COMPLETE; rltStatus = P_OS_REFUND_COMPLETE;
break; break;
case ODS_ORDERSTATUS_COFFEE_CONFIRMED: case ODS_OS_COF_CONFIRMED:
rltStatus = ORDERSTATUS_CONFIRMED; rltStatus = P_OS_CONFIRMED;
break; break;
case ODS_ORDERSTATUS_COFFEE_SHIPPING: case ODS_OS_COF_SHIPPING:
rltStatus = ORDERSTATUS_SHIPPING; rltStatus = P_OS_SHIPPING;
break; break;
case ODS_ORDERSTATUS_COFFEE_DONE: case ODS_OS_COF_DONE:
rltStatus = ORDERSTATUS_COMPLETE; rltStatus = P_OS_COMPLETE;
break; break;
case ODS_ORDERSTATUS_COFFEE_SHIPPING_CONFIRMED: case ODS_OS_COF_SHIPPING_CONFIRMED:
rltStatus = ORDERSTATUS_SHAPPING_COMFIRMED; rltStatus = P_OS_SHAPPING_COMFIRMED;
break; break;
default: default:
break; break;
...@@ -1858,53 +1671,6 @@ std::string JsonModule::_convertPosOperationToOdsJson(orderOperationObj &operati ...@@ -1858,53 +1671,6 @@ std::string JsonModule::_convertPosOperationToOdsJson(orderOperationObj &operati
return buffer.GetString(); return buffer.GetString();
} }
// bool JsonModule::_getServerResponseData(IN const char* json,OUT serverResponseOperationObj &obj)
// {
// rapidjson::Document document; // 定义一个Document对象
// document.Parse(json); // 解析,Parse()无返回值,也不会抛异常
// if (document.HasParseError()) // 通过HasParseError()来判断解析是否成功
// {
// // 可通过GetParseError()取得出错代码,
// // 注意GetParseError()返回的是一个rapidjson::ParseErrorCode类型的枚举值
// // 使用函数rapidjson::GetParseError_En()得到错误码的字符串说明,这里的En为English简写
// // 函数GetErrorOffset()返回出错发生的位置
// LOG(ERROR)<<"_getServerResponseData JSON parse error:"<<document.GetParseError()<<":"<<document.GetErrorOffset();
// }
// else
// {
// rapidjson::Value& code = document["code"];
// obj.code=code.GetString();
// rapidjson::Value& message = document["message"];
// obj.message=message.GetString();
// rapidjson::Value& ver = document["ver"];
// obj.ver=ver.GetString();
// return true;
// }
// return false;
// }
// std::string JsonModule::_convertServerResponseToJson(serverResponseOperationObj &response_obj)
// {
// rapidjson::StringBuffer buffer;
// rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
// writer.StartObject();
// writer.Key("status_code");
// writer.Int(atoi(response_obj.code.data()));
// writer.Key("msg");
// writer.String("");
// writer.Key("status");
// writer.Int(0);
// writer.Key("status_desc");
// writer.String("");
// writer.EndObject();
// return buffer.GetString();
// }
void JsonModule::_getStockWarnObj(IN const char* json,OUT stockWarnObj &warn_obj) void JsonModule::_getStockWarnObj(IN const char* json,OUT stockWarnObj &warn_obj)
{ {
...@@ -2026,7 +1792,9 @@ bool JsonModule::_getOrderResponseJson(IN const std::string& posResponse, IN con ...@@ -2026,7 +1792,9 @@ bool JsonModule::_getOrderResponseJson(IN const std::string& posResponse, IN con
writer.Key("store_id"); writer.Key("store_id");
writer.String(g_store_id.c_str()); writer.String(g_store_id.c_str());
writer.Key("pos_id"); writer.Key("pos_id");
writer.String(g_pos_id.c_str() ); writer.String(g_pos_id.c_str());
writer.Key("is_master");
writer.Bool(g_pos_ismaster);
writer.Key("child_store_id"); writer.Key("child_store_id");
writer.String(child_store_id.c_str()); writer.String(child_store_id.c_str());
...@@ -2241,13 +2009,13 @@ std::string JsonModule::_convertToCoffeeReqJson(IN const char* json) ...@@ -2241,13 +2009,13 @@ std::string JsonModule::_convertToCoffeeReqJson(IN const char* json)
int iType = 0; int iType = 0;
if (reqType == OPERATION_POS_COFFEE_MAKEING_DONE) { if (reqType == OPERATION_POS_COFFEE_MAKEING_DONE) {
iType = PLUGIN_TO_ODS_COFFEE_MAKEING_DONE; iType = PG2ODS_COF_MAKEING_DONE;
} }
else if (reqType == OPERATION_POS_COFFEE_DONE) { else if (reqType == OPERATION_POS_COFFEE_DONE) {
iType = PLUGIN_TO_ODS_COFFEE_DONE; iType = PG2ODS_COF_DONE;
} }
else if (reqType == OPERATION_POS_COFFEE_REFUND) { else if (reqType == OPERATION_POS_COFFEE_REFUND) {
iType = PLUGIN_TO_ODS_COFFEE_REFUND; iType = PG2ODS_COF_REFUND;
} }
writer.Key("fm_cmd"); writer.Key("fm_cmd");
...@@ -2341,6 +2109,7 @@ void JsonModule::setInitData(IN const char* data) ...@@ -2341,6 +2109,7 @@ void JsonModule::setInitData(IN const char* data)
g_store_id = document["store_id"].GetString(); g_store_id = document["store_id"].GetString();
g_pos_id = document["pos_id"].GetString(); g_pos_id = document["pos_id"].GetString();
g_pos_ismaster = document["is_master"].GetBool();
} }
int JsonModule::_getODSStatusByPOSReq(int fm_cmd) int JsonModule::_getODSStatusByPOSReq(int fm_cmd)
...@@ -2411,23 +2180,6 @@ bool JsonModule::_convertPOSReqPriorityJson(IN const std::string& posReq,OUT con ...@@ -2411,23 +2180,6 @@ bool JsonModule::_convertPOSReqPriorityJson(IN const std::string& posReq,OUT con
pos_id = vPosId.GetString(); pos_id = vPosId.GetString();
} }
// rapidjson::StringBuffer buffer;
// rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
// writer.StartObject();
// writer.Key("fm_cmd");
// writer.Int(REQUEST_TYPE_COMMON_WARN);
// writer.Key("notifyDate");
// writer.String(notifyDate.c_str());
// writer.Key("notifyDesc");
// writer.String(notifyDesc.c_str());
// writer.EndObject();
//odsJson = buffer.GetString();
return true; return true;
} }
...@@ -2541,25 +2293,24 @@ std::string JsonModule::_getCommonWarnStringByCode(int type) ...@@ -2541,25 +2293,24 @@ std::string JsonModule::_getCommonWarnStringByCode(int type)
int JsonModule::_getReqCodeByPOSReq(int fm_cmd) int JsonModule::_getReqCodeByPOSReq(int fm_cmd)
{ {
int rlt = 0; int rlt = 0;
switch (fm_cmd) switch (fm_cmd) {
{
case OPERATION_POS_APPOINTMENT_MAKEING_DONE: case OPERATION_POS_APPOINTMENT_MAKEING_DONE:
rlt = PLUGIN_TO_ODS_APPOINTMENT_MAKINGDONE; rlt = PG2ODS_APPOINTMENT_MAKINGDONE;
break; break;
case OPERATION_POS_APPOINTMENT_DONE: case OPERATION_POS_APPOINTMENT_DONE:
rlt = PLUGIN_TO_ODS_APPOINTMENT_DONE; rlt = PG2ODS_APPOINTMENT_DONE;
break; break;
case OPERATION_POS_APPOINTMENT_REFUND: case OPERATION_POS_APPOINTMENT_REFUND:
rlt = PLUGIN_TO_ODS_APPOINTMENT_REFUND; rlt = PG2ODS_APPOINTMENT_REFUND;
break; break;
case OPERATION_POS_APPOINTMENT_CONFIRM: case OPERATION_POS_APPOINTMENT_CONFIRM:
rlt = PLUGIN_TO_ODS_APPOINTMENT_CONFIRM; rlt = PG2ODS_APPOINTMENT_CONFIRM;
break; break;
case OPERATION_POS_SCANCODE_DONE: case OPERATION_POS_SCANCODE_DONE:
rlt = PLUGIN_TO_ODS_SCANCODE_DONE; rlt = PG2ODS_SCANCODE_DONE;
break; break;
case OPERATION_POS_SCANCODE_REFUND: case OPERATION_POS_SCANCODE_REFUND:
rlt = PLUGIN_TO_ODS_SCANCODE_REFUND; rlt = PG2ODS_SCANCODE_REFUND;
break; break;
default: default:
break; break;
......
...@@ -5,12 +5,15 @@ ...@@ -5,12 +5,15 @@
#include <stdio.h> #include <stdio.h>
#include "../base/CommonStruct.h" #include "../base/CommonStruct.h"
#include "../base/BaseDefine.h" #include "../base/BaseDefine.h"
//std::string GetTestJson(const int statuscode,const char* msg,const char* orderid);
extern std::string g_store_id; extern std::string g_store_id;
extern std::string g_pos_id; extern std::string g_pos_id;
extern bool g_pos_ismaster;
#define VERSION "2.1.2 RC" //版本号;
//void parseJson(const char* json);
class JsonModule class JsonModule
{ {
public: public:
......
...@@ -4,11 +4,9 @@ ...@@ -4,11 +4,9 @@
#include "SocketModule.h" #include "SocketModule.h"
#include "../utility/utility.h" #include "../utility/utility.h"
#include "../utility/zini.h" #include "../utility/zini.h"
//#include "SQLiteModule.h"
#ifdef WIN32 #ifdef WIN32
#include <Windows.h> #include <Windows.h>
//#pragma comment(lib,"../bin/sqlite3.lib")
#else #else
#include <pthread.h> #include <pthread.h>
#include <unistd.h> #include <unistd.h>
...@@ -19,14 +17,17 @@ ...@@ -19,14 +17,17 @@
#define ELPP_NO_DEFAULT_LOG_FILE #define ELPP_NO_DEFAULT_LOG_FILE
#include "../3rdParty/easylogging/easylogging++.h" #include "../3rdParty/easylogging/easylogging++.h"
INITIALIZE_EASYLOGGINGPP INITIALIZE_EASYLOGGINGPP
#define VERSION "1.2.2 RC " //版本号 /******Windows X86 模式,才支持插件脱离POS独立运行 ******/
#ifdef WIN32
std::string pos_config_storeid;
int pos_config_posid;
std::string pos_config_ismaster;
#endif
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; //设置pos优先级
std::string g_set_pos_priority_ods_back; std::string g_set_pos_priority_ods_back;
...@@ -39,8 +40,15 @@ int pos_listen_port; ...@@ -39,8 +40,15 @@ int pos_listen_port;
extern std::string g_store_id; //进程运行期间存储全局 Store 编号; extern std::string g_store_id; //进程运行期间存储全局 Store 编号;
extern std::string g_pos_id; //进程运行期间存储全局 Pos 编号; extern std::string g_pos_id; //进程运行期间存储全局 Pos 编号;
extern bool g_pos_ismaster; //进程运行期间存储全局 是否主POS 编号;
/****** Windows X86 模式,才支持插件脱离POS独立运行 ******/
#ifdef WIN32
bool bInitDone = TRUE; //初始化完成
#else
bool bInitDone = false; //初始化完成
#endif
bool bInitDone=false; //初始化完成
bool bPriorityDone=true; //设置POS优先级 bool bPriorityDone=true; //设置POS优先级
TCPClient longConnectionOds; //长连接tcp对象 TCPClient longConnectionOds; //长连接tcp对象
...@@ -54,14 +62,12 @@ void kill_origin_process(); ...@@ -54,14 +62,12 @@ void kill_origin_process();
void logRolloutHandler(const char* filename, std::size_t size) void logRolloutHandler(const char* filename, std::size_t size)
{ {
/// 备份日志
//std::string strLogPath = GetProcDir();
//strLogPath.append(filename);
std::cout<<"bk filename:"<<filename<<std::endl; std::cout<<"bk filename:"<<filename<<std::endl;
std::stringstream ss; std::stringstream ss;
ss << "mv " << filename << " "<<filename<<"_bk"; ss << "mv " << filename << " "<<filename<<"_bk";
system(ss.str().c_str()); system(ss.str().c_str());
} }
#ifdef WIN32 #ifdef WIN32
DWORD WINAPI listen_pos_func(LPVOID lpParamter) DWORD WINAPI listen_pos_func(LPVOID lpParamter)
#else #else
...@@ -71,68 +77,62 @@ void* listen_pos_func(void* arg) ...@@ -71,68 +77,62 @@ void* listen_pos_func(void* arg)
TCPServer server; TCPServer server;
JsonModule jsonTool; JsonModule jsonTool;
if( server.doListen(client_listen_port) ) if( server.doListen(client_listen_port) ) {
{
LOG(INFO) << "local listen port: [" << client_listen_port << "] successful"; LOG(INFO) << "local listen port: [" << client_listen_port << "] successful";
}else } else {
{
LOG(INFO) << "local listen port: [" << client_listen_port << "] failed, maybe instance is exist,exit!!!"; LOG(INFO) << "local listen port: [" << client_listen_port << "] failed, maybe instance is exist,exit!!!";
exit(0); exit(0);
} }
while(true) while(true) {
{
TCPClient pos; TCPClient pos;
std::string posRequestData; std::string posRequestData;
std::string requestOdsData; std::string requestOdsData;
std::string responseData; std::string responseData;
if( server.accept(pos) ) if( server.accept(pos) ) {
{
char tmpBuf[FM_BUF_SIZE] = {0}; char tmpBuf[FM_BUF_SIZE] = {0};
if( pos.read(tmpBuf, sizeof(tmpBuf)) )
{ if( pos.read(tmpBuf, sizeof(tmpBuf)) ) {
posRequestData = tmpBuf; posRequestData = tmpBuf;
// 如果为初始化请求则通过长连接socket发送 // 如果为初始化请求则通过长连接socket发送
//bool isInit=jsonTool.isInitData(posRequestData); //bool isInit=jsonTool.isInitData(posRequestData);
int reqType=jsonTool.getPushType(posRequestData.data()); int reqType=jsonTool.getPushType(posRequestData.data());
LOG(INFO)<<"pos reqType:"<<reqType; LOG(INFO)<<"pos reqType:"<<reqType;
if(reqType==REQUEST_TYPE_INIT)
{ if(reqType==REQUEST_TYPE_INIT) {
if (bInitDone) { if (bInitDone) {
LOG(INFO) << "set timeout 1"; LOG(INFO) << "set timeout 1";
longConnectionOds.setSocketTimeout(1); longConnectionOds.setSocketTimeout(1);
longConnectionOds.close(); //关闭长连接,等待重连 longConnectionOds.close(); //关闭长连接,等待重连
} }
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_ods_back.clear();
// g_init_data = posRequestData;
LOG(INFO) <<"INIT POS ===>> PLUGIN:"<<posRequestData.c_str(); LOG(INFO) <<"INIT POS ===>> PLUGIN:"<<posRequestData.c_str();
jsonTool.convertInitDataPos2Ods(posRequestData,g_init_data); jsonTool.convertInitDataPos2Ods(posRequestData,g_init_data);
//jsonTool.getPosResponseData(100, "successful!", responseData);
LOG(INFO) <<"INIT PLUGIN ===>> ODS:"<<g_init_data.c_str(); LOG(INFO) <<"INIT PLUGIN ===>> ODS:"<<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) <<"INIT PLUGIN ===>> POS:"<<responseData.c_str(); LOG(INFO) <<"INIT PLUGIN ===>> POS:"<<responseData.c_str();
break; break;
} } else {
else{
LOG(INFO)<<"wait for ods init back data"; LOG(INFO)<<"wait for ods init back data";
os_sleep(3); os_sleep(3);
} }
} }
jsonTool.setInitData(posRequestData.data()); //把初始化数据暂存起来 jsonTool.setInitData(posRequestData.data()); //把初始化数据暂存起来
}else
{ } else {
jsonTool.getPosResponseData(101, "invalid initdata!", responseData); jsonTool.getPosResponseData(101, "invalid initdata!", responseData);
} }
}
else if(reqType==REQUEST_TYPE_POS_PRIORITY){ } else if(reqType==REQUEST_TYPE_POS_PRIORITY) {
if(bInitDone){ if(bInitDone){
//未完成,缺接口 //未完成,缺接口
bPriorityDone=false; bPriorityDone=false;
...@@ -140,25 +140,25 @@ void* listen_pos_func(void* arg) ...@@ -140,25 +140,25 @@ void* listen_pos_func(void* arg)
g_set_pos_priority_ods_back.clear(); g_set_pos_priority_ods_back.clear();
jsonTool.convertSetPosPriorityDataPos2Ods(posRequestData,g_set_pos_priority); jsonTool.convertSetPosPriorityDataPos2Ods(posRequestData,g_set_pos_priority);
//等待ods返回初始化结果 //等待ods返回初始化结果
while(true){ while(true) {
if(!g_set_pos_priority_ods_back.empty()){
if ( !g_set_pos_priority_ods_back.empty() ) {
jsonTool.getSetPosPriorityBackData(g_set_pos_priority_ods_back.data(),responseData); jsonTool.getSetPosPriorityBackData(g_set_pos_priority_ods_back.data(),responseData);
break; break;
} } else {
else{
LOG(INFO)<<"wait for ods priority back data"; LOG(INFO)<<"wait for ods priority back data";
os_sleep(1); os_sleep(1);
} }
} }
} }
} } else if ( reqType==REQUEST_TYPE_GOODS_CHANGE) {
else if(reqType==REQUEST_TYPE_GOODS_CHANGE){
std::string posReq = charset_g2u(posRequestData); std::string posReq = charset_g2u(posRequestData);
LOG(INFO)<<"POS send goods change data:"<<posReq.data(); LOG(INFO)<<"POS send goods change data:"<<posReq.data();
jsonTool.getPosResponseData(100, "success", responseData); jsonTool.getPosResponseData(100, "success", responseData);
} }
else if(OPERATION_POS_CONFIRM == reqType else if ( OPERATION_POS_CONFIRM == reqType
|| OPERATION_POS_CANCEL == reqType || OPERATION_POS_CANCEL == reqType
|| OPERATION_POS_REFUND_AGREE == reqType || OPERATION_POS_REFUND_AGREE == reqType
|| OPERATION_POS_REFUND_DISAGREE == reqType || OPERATION_POS_REFUND_DISAGREE == reqType
...@@ -175,50 +175,44 @@ void* listen_pos_func(void* arg) ...@@ -175,50 +175,44 @@ void* listen_pos_func(void* arg)
{ {
LOG(INFO)<<"REQ POS ===>> PLUGIN:"<<posRequestData.data(); LOG(INFO)<<"REQ POS ===>> PLUGIN:"<<posRequestData.data();
// 将POS请求数据转换为中台可接受数据格式 // 将POS请求数据转换为中台可接受数据格式
if( jsonTool.convertDataPos2Ods(posRequestData, requestOdsData) ) if( jsonTool.convertDataPos2Ods(posRequestData, requestOdsData) ) {
{
LOG(INFO)<<"REQ PLUGIN ===>> ODS:"<<requestOdsData.data(); LOG(INFO)<<"REQ PLUGIN ===>> ODS:"<<requestOdsData.data();
// 同步阻塞发送到ODS并等待返回 // 同步阻塞发送到ODS并等待返回
TCPClient ods; TCPClient ods;
if( ods.doConnect(ods_recv_port, ods_ip.c_str()) )
{ if( ods.doConnect(ods_recv_port, ods_ip.c_str()) ) {
ods.setSocketTimeout(30); //设置超时 ods.setSocketTimeout(30); //设置超时
if( ods.send(requestOdsData) )
{ if( ods.send(requestOdsData) ) {
std::string tmp; std::string tmp;
if( ods.receive(tmp) )
{ if( ods.receive(tmp) ) {
LOG(INFO)<<"REQ ODS ===>> PLUGIN:"<<tmp.data(); LOG(INFO)<<"REQ ODS ===>> PLUGIN:"<<tmp.data();
if (!jsonTool.getPosResponseData(tmp, posRequestData, responseData)) { if (!jsonTool.getPosResponseData(tmp, posRequestData, responseData)) {
jsonTool.getPosResponseData(101, "receive data from [ODS] invalid!", responseData); jsonTool.getPosResponseData(101, "receive data from [ODS] invalid!", responseData);
} }
}else } else {
{
jsonTool.getPosResponseData(101, "receive data from [ODS] failed!", responseData); jsonTool.getPosResponseData(101, "receive data from [ODS] failed!", responseData);
} }
}else
{ } else {
jsonTool.getPosResponseData(101, "send data to [ODS] failed!", responseData); jsonTool.getPosResponseData(101, "send data to [ODS] failed!", responseData);
} }
ods.close(); ods.close();
}else } else {
{
jsonTool.getPosResponseData(101, "connect [ODS] failed!", responseData); jsonTool.getPosResponseData(101, "connect [ODS] failed!", responseData);
} }
}else } else {
{
jsonTool.getPosResponseData(101, "convert data to [ODS] format failed!", responseData); jsonTool.getPosResponseData(101, "convert data to [ODS] format failed!", responseData);
} }
}
else if (-1 == reqType) { } else if (-1 == reqType) {
//接收到-1,程序需要重启,关闭本进程 //接收到-1,程序需要重启,关闭本进程
LOG(INFO) << "recive exit msessage,exit!!!"; LOG(INFO) << "recive exit msessage,exit!!!";
pos.write("100"); pos.write("100");
pos.close(); pos.close();
server.close(); server.close();
exit(0); exit(0);
} }
...@@ -226,19 +220,26 @@ void* listen_pos_func(void* arg) ...@@ -226,19 +220,26 @@ void* listen_pos_func(void* arg)
LOG(INFO) << "PLUGIN ===>>POS:"<<responseData.data(); LOG(INFO) << "PLUGIN ===>>POS:"<<responseData.data();
pos.write(responseData.c_str()); pos.write(responseData.c_str());
pos.close(); pos.close();
if(reqType==REQUEST_TYPE_INIT){ if(reqType==REQUEST_TYPE_INIT){
bInitDone=true; //初始化完成,可以接收订单 bInitDone=true; //初始化完成,可以接收订单
} }
if(reqType==REQUEST_TYPE_POS_PRIORITY){ if(reqType==REQUEST_TYPE_POS_PRIORITY){
bPriorityDone=true; //设置pos优先级完成 bPriorityDone=true; //设置pos优先级完成
} }
LOG(INFO)<<"SEND END"; LOG(INFO)<<"SEND END";
}else
{ } else {
LOG(INFO) << "recv pos pushData failed"; /****** X86 & DEBUG 模式,才支持插件脱离POS独立运行 ******/
#ifdef WIN32
LOG(INFO) << " Windows X86 模式 无需等待 POS 推送初始化数据";
#else
LOG(INFO) << "recv pos pushData failed";
#endif
} }
}else
{ } else {
LOG(INFO) << "accept pos connect failed"; LOG(INFO) << "accept pos connect failed";
} }
} }
...@@ -249,26 +250,19 @@ void* listen_pos_func(void* arg) ...@@ -249,26 +250,19 @@ void* listen_pos_func(void* arg)
int main(int argc,char *argv[]) int main(int argc,char *argv[])
{ {
////--------test------------
//JsonModule jsonTest;
//std::string json = "{\"alertTime\":1534416551000,\"channel\":\"201\",\"id\":117049102732151083,\"pcId\":\"10\",\"qty\":0,\"saftQty\":1,\"selfMacId\":\"2027490121\",\"shelfNo\":\"20274901210405\",\"sku\":\"20627836\",\"storeId\":\"202749\",\"pk_id\":1}";
//std::string json = "{\"key\":\"网络故障\",\"notifyDate\":1535240399875,\"notifyDesc\":\"网络故障\",\"notifyType\":0,\"storeId\":\"403219\",\"pk_id\":415,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018,\"fm_cmd\":1018}";
//std::string rltTest;
//bool bTest = jsonTest.convertDataOds2Pos(json, rltTest);
////-------------------------
if (2 == argc && 0 == strcmp("-v", argv[1])) { if (2 == argc && 0 == strcmp("-v", argv[1])) {
printf("version:%s\n", VERSION); printf("version:%s\n", VERSION);
return 0; return 0;
} }
/* Mark
* 与ODS通信全部加数据头(长度)
* 与POS通信全部不加数据头
* end*/
#ifdef WIN32 #ifdef WIN32
WSADATA transData; WSADATA transData;
WSAStartup(MAKEWORD(2, 2), &transData); WSAStartup(MAKEWORD(2, 2), &transData);
ShowWindow(GetConsoleWindow(), SW_HIDE); //隐藏窗口,后台运行 /****** Windows X86 模式,才支持插件脱离POS独立运行 ******/
//ShowWindow(GetConsoleWindow(), SW_HIDE); //隐藏窗口,模拟很多程序以 后台方式 运行
JsonModule jsonToolTemp;
bool bCheckInitData = jsonToolTemp.isInitData(g_init_data);
LOG(INFO) << "Check g_init_data is OK ?: " << bCheckInitData;
#else #else
signal(SIGPIPE, SIG_IGN); signal(SIGPIPE, SIG_IGN);
#endif #endif
...@@ -292,27 +286,30 @@ int main(int argc,char *argv[]) ...@@ -292,27 +286,30 @@ int main(int argc,char *argv[])
LOG(INFO) << "strIniPath: " << strIniPath.data(); LOG(INFO) << "strIniPath: " << strIniPath.data();
ods_ip = ZIni::readString("ODS","ip", "", strIniPath.c_str()); ods_ip = ZIni::readString("ODS","ip", "", strIniPath.c_str());
getIpByDns(ods_ip); getIpByDns(ods_ip);
ods_push_port = ZIni::readInt("ODS", "pushPort", 0, strIniPath.c_str()); ods_push_port = ZIni::readInt("ODS", "pushPort", 0, strIniPath.c_str());
ods_recv_port = ZIni::readInt("ODS", "recvPort", 0, strIniPath.c_str()); ods_recv_port = ZIni::readInt("ODS", "recvPort", 0, strIniPath.c_str());
int ods_socket_timeout = ZIni::readInt("ODS", "socketTimeout", 0, strIniPath.c_str()); int ods_socket_timeout = ZIni::readInt("ODS", "socketTimeout", 0, strIniPath.c_str());
pos_ip = ZIni::readString("POS","ip", "", strIniPath.c_str()); pos_ip = ZIni::readString("POS","ip", "", strIniPath.c_str());
pos_listen_port = ZIni::readInt("POS","port", 0, strIniPath.c_str()); pos_listen_port = ZIni::readInt("POS","port", 0, strIniPath.c_str());
client_listen_port = ZIni::readInt("SYS", "port", 0, strIniPath.c_str()); client_listen_port = ZIni::readInt("SYS", "port", 0, strIniPath.c_str());
LOG(INFO) << "[ODS]ip: " << ods_ip.data() #ifdef WIN32
<< "-push port: " << ods_push_port pos_config_storeid = ZIni::readString("POS", "storeId", "208888", strIniPath.c_str());
<< "-recv port: " << ods_recv_port pos_config_posid = ZIni::readInt("POS", "posId", 1, strIniPath.c_str());
<< "-socket timeout: " << ods_socket_timeout; pos_config_ismaster = ZIni::readString("POS", "isMaster", "false", strIniPath.c_str());
LOG(INFO) << "[POS]ip: " << pos_ip g_init_data = "{ \"fm_cmd\":1000,\"storeId\":\"" + pos_config_storeid + "\",\"pos_id\":\"" + std::to_string(pos_config_posid)
<< "-listen port: " << pos_listen_port; + "\",\"operator_id\":\"zouwuyang\",\"business_date\":\"20201115\",\"is_master\":" + pos_config_ismaster + ",\"version\":\"" + VERSION + "\",\"listen_port\":24445 }";
LOG(INFO) << "[ODS]ip: " << ods_ip.data() << "-push port: " << ods_push_port << "-recv port: " << ods_recv_port << "-socket timeout: " << ods_socket_timeout;
LOG(INFO) << "[POS]ip:" << pos_ip << "-listen port:" << pos_listen_port << " storeId:" << pos_config_storeid << " posId:" << pos_config_posid << " is_master:" << pos_config_ismaster;
#else
LOG(INFO) << "[ODS]ip: " << ods_ip.data() << "-push port: " << ods_push_port << "-recv port: " << ods_recv_port << "-socket timeout: " << ods_socket_timeout;
LOG(INFO) << "[POS]ip: " << pos_ip << "-listen port: " << pos_listen_port;
LOG(INFO) << "[Local]listen port: " << client_listen_port; LOG(INFO) << "[Local]listen port: " << client_listen_port;
#endif
kill_origin_process(); //如果已有进程,杀掉 kill_origin_process(); //如果已有进程,杀掉
//end
#ifdef WIN32 #ifdef WIN32
HANDLE hTakeway = CreateThread(NULL, 0, listen_pos_func, NULL, 0, NULL); HANDLE hTakeway = CreateThread(NULL, 0, listen_pos_func, NULL, 0, NULL);
...@@ -329,39 +326,37 @@ int main(int argc,char *argv[]) ...@@ -329,39 +326,37 @@ int main(int argc,char *argv[])
//TCPClient ods; //TCPClient ods;
JsonModule jsonTool; JsonModule jsonTool;
while(true) while(true) {
{
std::string odsPushData; std::string odsPushData;
std::string pushPosData; std::string pushPosData;
std::string responseData; std::string responseData;
// 判断是否成功连接ODS // 判断是否成功连接ODS
if( !longConnectionOds.isValid() ) if( !longConnectionOds.isValid() ) {
{
if(longConnectionOds.doConnect(ods_push_port, ods_ip.c_str()) ) if ( longConnectionOds.doConnect( ods_push_port, ods_ip.c_str() ) ) {
{
LOG(INFO) << "connect ODS successful"; LOG(INFO) << "connect ODS successful";
longConnectionOds.setSocketTimeout(ods_socket_timeout); //设置超时时间10s longConnectionOds.setSocketTimeout(ods_socket_timeout); //设置超时时间10s
// 注册socket信息
while(true) while(true) { // 注册socket信息
{
//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()) {
//g_init_data = "{\"fm_cmd\":1000,\"listen_port\":24445,\"storeId\":\"202557\",\"pos_id\":\"1\",\"operator_id\":\"17076352\",\"is_master\":true,\"ver\":1}";
if(!g_init_data.empty()) if(longConnectionOds.send(g_init_data) ) {
{
if(longConnectionOds.send(g_init_data) )
{
longConnectionOds.receive(odsPushData); longConnectionOds.receive(odsPushData);
g_init_data_ods_back=odsPushData; g_init_data_ods_back=odsPushData;
LOG(INFO)<<"INIT ODS ===>> PLUGIN:"<<odsPushData.data(); LOG(INFO)<<"INIT ODS ===>> PLUGIN:"<<odsPushData.data();
if (odsPushData.empty()|| !jsonTool.isInitBackValid(odsPushData.data())) { if (odsPushData.empty()|| !jsonTool.isInitBackValid(odsPushData.data())) {
LOG(INFO) << "invalid data,close connect"; LOG(INFO) << "invalid data,close connect";
longConnectionOds.close(); //当连接到负载均衡,并没有和ods建立连接的时候。返回值为空,所以应该关闭重新连接 longConnectionOds.close(); //当连接到负载均衡,并没有和ods建立连接的时候。返回值为空,所以应该关闭重新连接
os_sleep(10); os_sleep(10);
} }
int count=0; int count=0;
while(!bInitDone){
while(!bInitDone) {
LOG(INFO)<<"wait for init done"; LOG(INFO)<<"wait for init done";
if( !longConnectionOds.isValid() ){ if( !longConnectionOds.isValid() ){
LOG(INFO)<<"ods is not valid"; LOG(INFO)<<"ods is not valid";
os_sleep(1); //防止在ods挂掉后狂刷日志 os_sleep(1); //防止在ods挂掉后狂刷日志
...@@ -375,17 +370,18 @@ int main(int argc,char *argv[]) ...@@ -375,17 +370,18 @@ int main(int argc,char *argv[])
break; break;
} }
} }
break; break;
} }
}
else{ } else {
LOG(INFO)<<"Haven't receive init data"; LOG(INFO)<<"Haven't receive init data";
} }
os_sleep(10); os_sleep(10);
continue; continue;
} }
}else
{ }else {
LOG(INFO) << "connect ODS failed"; LOG(INFO) << "connect ODS failed";
os_sleep(10); os_sleep(10);
continue; continue;
...@@ -394,56 +390,62 @@ int main(int argc,char *argv[]) ...@@ -394,56 +390,62 @@ int main(int argc,char *argv[])
if(!bPriorityDone){ if(!bPriorityDone){
LOG(INFO)<<"ODS set priority send:"<<g_set_pos_priority.data(); LOG(INFO)<<"ODS set priority send:"<<g_set_pos_priority.data();
if(longConnectionOds.send(g_set_pos_priority) )
{ if(longConnectionOds.send(g_set_pos_priority) ) {
longConnectionOds.receive(odsPushData); longConnectionOds.receive(odsPushData);
g_set_pos_priority_ods_back=odsPushData; g_set_pos_priority_ods_back=odsPushData;
LOG(INFO)<<"ODS set priority back:"<<odsPushData.data(); LOG(INFO)<<"ODS set priority back:"<<odsPushData.data();
} }
} }
if(longConnectionOds.receive(odsPushData) ) if(longConnectionOds.receive(odsPushData) ) {
{
LOG(INFO) << "---------------- ODS ===>> PLUGIN ---------------"; LOG(INFO) << "---------------- ODS ===>> PLUGIN ---------------";
LOG(INFO) << odsPushData; LOG(INFO) << odsPushData;
int dataType=jsonTool.isHeartbeatData(odsPushData.data()); int dataType=jsonTool.isHeartbeatData(odsPushData.data());
if(2==dataType){ if(2==dataType){
if( jsonTool.convertDataOds2Pos(odsPushData, pushPosData) )
{ if( jsonTool.convertDataOds2Pos(odsPushData, pushPosData) ) {
LOG(INFO) << "----------- PLUGIN ===>> POS ------------"; LOG(INFO) << "----------- PLUGIN ===>> POS ------------";
LOG(INFO) << pushPosData; LOG(INFO) << pushPosData;
if (!pushPosData.empty()) { if (!pushPosData.empty()) {
#ifdef WIN32
LOG(INFO) << "-----------X86 & DEBUG 模式 无需真实推送到POS ------------";
g_store_id = pos_config_storeid; g_pos_id = std::to_string(pos_config_posid); g_pos_ismaster = pos_config_ismaster == "true" ? true : false;
if (!order_send_to_pos(pushPosData, odsPushData, responseData)) { if (!order_send_to_pos(pushPosData, odsPushData, responseData)) {
jsonTool.getOdsResponseData(101, "send to pos failed or receive data illegal!", odsPushData, responseData); jsonTool.getOdsResponseData(101, "send to pos failed or receive data illegal!", odsPushData, responseData);
} }
} #else
else { //-----------Production Environment, Need Delivery POS ------------
if (!order_send_to_pos(pushPosData, odsPushData, responseData)) {
jsonTool.getOdsResponseData(101, "send to pos failed or receive data illegal!", odsPushData, responseData);
}
#endif
} else {
jsonTool.getOdsResponseData(101, "convert data to [POS] format failed,empty json!", odsPushData, responseData); jsonTool.getOdsResponseData(101, "convert data to [POS] format failed,empty json!", odsPushData, responseData);
} }
}else } else {
{
jsonTool.getOdsResponseData(101, "convert data to [POS] format failed!", odsPushData, responseData); jsonTool.getOdsResponseData(101, "convert data to [POS] format failed!", odsPushData, responseData);
} }
LOG(INFO) << "PLUGIN ===>> ODS:"<<responseData.data(); LOG(INFO) << "PLUGIN ===>> ODS:"<<responseData.data();
//test
//responseData="{\"fm_cmd\": 2,\"order_id\" : \"1234\",\"status\" : 1,\"channel\" : \"1234\",\"status_code\" : 100,\"msg\" : \"\"}";
bool rlt = longConnectionOds.send(responseData); bool rlt = longConnectionOds.send(responseData);
LOG(INFO)<<"send to ods result:"<<rlt; LOG(INFO)<<"send to ods result:"<<rlt;
}
else if(1==dataType){ } else if(1==dataType) {
if(!bInitDone){ if(!bInitDone){
longConnectionOds.setValid(false); longConnectionOds.setValid(false);
LOG(INFO)<<"maybe pos restart,reconnect!!!"; LOG(INFO)<<"maybe pos restart,reconnect!!!";
} }
}
else if(3==dataType){ } else if(3==dataType){
LOG(INFO)<<"illegal data!!"; LOG(INFO)<<"illegal data!!";
} }
}else } else {
{
longConnectionOds.close(); longConnectionOds.close();
os_sleep(2); //防止在ods挂掉后狂刷日志 os_sleep(2); //防止在ods挂掉后狂刷日志
LOG(INFO) << "recv ODS pushData failed or timeout"; LOG(INFO) << "recv ODS pushData failed or timeout";
...@@ -454,7 +456,7 @@ int main(int argc,char *argv[]) ...@@ -454,7 +456,7 @@ int main(int argc,char *argv[])
#ifdef WIN32 #ifdef WIN32
WSACleanup(); WSACleanup();
#endif #endif
//sqlite.closeSQLite();
return 0; return 0;
} }
...@@ -463,93 +465,93 @@ bool order_send_to_pos(IN std::string &order_json,IN std::string &ods_json,OUT s ...@@ -463,93 +465,93 @@ bool order_send_to_pos(IN std::string &order_json,IN std::string &ods_json,OUT s
bool rlt=true; bool rlt=true;
TCPClient pos; TCPClient pos;
JsonModule jsonTool; JsonModule jsonTool;
std::string tmp="{\"status_code\": 102, \"msg\": \"connect pos failed!\"}";
if( pos.doConnect(pos_listen_port, pos_ip.c_str()) ) #ifdef WIN32
{ // Simulation Pos Recived New Order Data;
std::string tmp = "{\"fm_cmd\": 1001,\"status_code\": 100, \"msg\": \"Simulation Push Pos Sucessful\"}";
#else
std::string tmp = "{\"status_code\": 102, \"msg\": \"connect pos failed!\"}";
if( pos.doConnect(pos_listen_port, pos_ip.c_str()) ) {
pos.setSocketTimeout(60); //设置超时 pos.setSocketTimeout(60); //设置超时
if( pos.write(order_json.c_str()) )
{ if( pos.write(order_json.c_str()) ) {
char tmpBuf[1024*10] = {0}; char tmpBuf[1024*10] = {0};
if( pos.read(tmpBuf,sizeof(tmpBuf)) )
{ if( pos.read(tmpBuf,sizeof(tmpBuf)) ) {
LOG(INFO) << "POS ===>> PLUGIN:"<<tmpBuf; LOG(INFO) << "POS ===>> PLUGIN:"<<tmpBuf;
tmp=tmpBuf; tmp=tmpBuf;
//pos发送过来的数据为gb2312编码,需要转换为utf8 //pos发送过来的数据为gb2312编码,需要转换为utf8
//std::string tmpUtf8= charset_g2u(tmp);
//LOG(INFO)<<"gb2312 to utf8:"<<tmpUtf8.data(); } else {
//jsonTool.getOdsResponseData(tmpUtf8, order_json, responseData);
}else
{
LOG(INFO) << "receive data from pos failed"; LOG(INFO) << "receive data from pos failed";
rlt=false; rlt=false;
} }
}else
{ } else {
LOG(INFO) << "send data to pos failed"; LOG(INFO) << "send data to pos failed";
rlt=false; rlt=false;
} }
pos.close(); pos.close();
}else
{ }else {
LOG(INFO) << "connect pos failed,pos_listen_port:" << pos_listen_port << " pos_ip:" << pos_ip; LOG(INFO) << "connect pos failed,pos_listen_port:" << pos_listen_port << " pos_ip:" << pos_ip;
rlt=false; rlt=false;
} }
#endif
jsonTool.getOdsResponseData(tmp, order_json,ods_json, back_json); jsonTool.getOdsResponseData(tmp, order_json,ods_json, back_json);
return rlt; return rlt;
} }
void getIpByDns(IN std::string &ods_ip) { void getIpByDns(IN std::string &ods_ip) {
if (ods_ip.front() < '0' || ods_ip.front() > '9') {
struct hostent* pHost = NULL;
bool bGetDnsRet = false;
for (int n = 0; n < 3; n++) {
pHost = gethostbyname(ods_ip.c_str());
if (!pHost) {
LOG(INFO) << "DNS Resolve Failed: ods domain name: " << n << " " << ods_ip.c_str();
LOG(ERROR) << "DNS Resolve Failed: I don't know what to do, sleep 1 minute first ";
os_sleep(6);
}
else {
bGetDnsRet = true;
break;
}
}
if (bGetDnsRet) {
int i = 0;
if (pHost->h_addrtype == AF_INET) {
char str[32];
char **pptr;
pptr = pHost->h_addr_list;
if (ods_ip.front() < '0' || ods_ip.front() > '9') {
struct hostent* pHost = NULL;
bool bGetDnsRet = false;
for (int n = 0; n < 3; n++) {
pHost = gethostbyname(ods_ip.c_str());
if (!pHost) {
LOG(INFO) << "DNS Resolve Failed: ods domain name: " << n << " " << ods_ip.c_str();
LOG(ERROR) << "DNS Resolve Failed: I don't know what to do, sleep 20 seconds first ";
os_sleep(20);
} else {
bGetDnsRet = true;
break;
}
}
if (bGetDnsRet) {
int i = 0;
if (pHost->h_addrtype == AF_INET) {
char str[32];
char **pptr;
pptr = pHost->h_addr_list;
#ifdef WIN32 #ifdef WIN32
ods_ip = *(ULONG*)(pHost->h_addr); ods_ip = *(ULONG*)(pHost->h_addr);
#else #else
for (; *pptr != NULL; pptr++) { for (; *pptr != NULL; pptr++) {
inet_ntop(pHost->h_addrtype, *pptr, str, sizeof(str) ); inet_ntop(pHost->h_addrtype, *pptr, str, sizeof(str));
LOG(INFO) << "DNS Resolve IP List: " << str; LOG(INFO) << "DNS Resolve IP List: " << str;
} }
inet_ntop(pHost->h_addrtype, pHost->h_addr, str, sizeof(str)); inet_ntop(pHost->h_addrtype, pHost->h_addr, str, sizeof(str));
ods_ip = str; ods_ip = str;
#endif #endif
}
} else {
LOG(ERROR) << "DNS Resolve Failed: I will exit, bye-bye";
exit(0);
}
LOG(INFO) << "DNS Resolve Sucessful ODS_IP: " << ods_ip.c_str();
} else {
LOG(INFO) << "No Need DNS Resolve ODS_IP: " << ods_ip.c_str();
}
}
}
else {
LOG(ERROR) << "DNS Resolve Failed: I will exit, bye-bye";
exit(0);
}
LOG(INFO) << "DNS Resolve Sucessful ODS_IP: " << ods_ip.c_str();
}
else {
LOG(INFO) << "No Need DNS Resolve ODS_IP: " << ods_ip.c_str();
}
} }
...@@ -563,6 +565,7 @@ void kill_origin_process() ...@@ -563,6 +565,7 @@ void kill_origin_process()
#else #else
execName = "takeaway.exe"; execName = "takeaway.exe";
#endif // _DEBUG #endif // _DEBUG
#else #else
execName = "takeaway"; execName = "takeaway";
#endif #endif
...@@ -570,27 +573,31 @@ void kill_origin_process() ...@@ -570,27 +573,31 @@ void kill_origin_process()
TCPClient pos; TCPClient pos;
JsonModule jsonTool; JsonModule jsonTool;
std::string tmp = "{\"fm_cmd\": -1}"; std::string tmp = "{\"fm_cmd\": -1}";
if (pos.doConnect(client_listen_port, pos_ip.c_str())){
if (pos.write(tmp.c_str())){ if ( pos.doConnect( client_listen_port, pos_ip.c_str() ) ) {
if ( pos.write( tmp.c_str() ) ) {
char tmpBuf[100] = { 0 }; char tmpBuf[100] = { 0 };
if (pos.read(tmpBuf, sizeof(tmpBuf))){
if ( pos.read( tmpBuf, sizeof(tmpBuf) ) ) {
LOG(INFO) << "kill back:" << tmpBuf; LOG(INFO) << "kill back:" << tmpBuf;
if (strcmp(tmpBuf, "100") == 0) { if (strcmp(tmpBuf, "100") == 0) {
os_sleep(2); //成功杀掉进程,延时2s等待释放端口资源 os_sleep(2); //成功杀掉进程,延时2s等待释放端口资源
} } else
else
rlt = false; rlt = false;
}
else } else
rlt = false; rlt = false;
} } else
else
rlt = false; rlt = false;
pos.close(); pos.close();
} }
if (!rlt) { if (!rlt) {
//如果关闭失败,根据进程名称杀掉进程 //如果关闭失败,根据进程名称杀掉进程
kill_process_by_name(execName.c_str()); kill_process_by_name(execName.c_str());
} }
}
\ No newline at end of file }
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