Commit c0bb3af5 by wuyang.zou

fix bug:

1、优化母子门店配置功能;
2、插件依赖 OMS 提供的 全链路OrderType 与 全链路 ServiceType 入机;
3、WSG-MOD 商品昵称存储,便于 POS 进行打印
4、优化点击 pos机按钮事件;
5、支持插件驱动打印模式 通过打印消息队列表进行通信;
6、过滤 sku长度大于 9;
7、登录汇报插件版本号;
8、客诉单入机 tender 由现金 变更 84 mod + oms 订单号;
parent 08296728
Pipeline #23963 failed with stage
in 0 seconds
......@@ -106,6 +106,7 @@ private:
int m_modStoreStatus;
bool m_bLastHeartIsError;
int m_orderCount;
int m_clickPosCount;
//订单清除定时器
QTimer *m_clearTimer;
QTimer *m_heartTimer;
......@@ -155,6 +156,7 @@ private:
bool m_initPrintSumBillPosDBRet;
bool m_initGetAuthPosDBRet;
bool m_initPrintCupStickPosDBRet;
bool m_initPrintMsgQueueDBRet;
signals:
// 发送信号给自己 做登陆
......
......@@ -175,5 +175,12 @@ int ConfigManger::GetOrderSslConfig()
return m_config->value("SSLConfig/order").toInt();
}
int ConfigManger::GetSubStoreSkipVerify()
{
return m_config->value(INI_SUBSTORESKIPVERIFY).toInt();
}
......@@ -139,6 +139,7 @@ public:
int GetLoginSslConfig();
int GetOrderSslConfig();
int GetSubStoreSkipVerify();
private:
ConfigManger();
......
......@@ -49,7 +49,7 @@ void DataManger::SetPartnerId(const QString &partnerId)
}
QJsonObject DataManger::GetLoginData(const QString &partnerId, const QString &storeId, const QString &password,
const QString &stationId, const QString &cashierId, const QString &ipAddress)
const QString &stationId, const QString &cashierId, const QString &ipAddress, const QString &versionComments)
{
QJsonObject rObj;
Q_UNUSED(cashierId);
......@@ -58,6 +58,8 @@ QJsonObject DataManger::GetLoginData(const QString &partnerId, const QString &st
rObj.insert(JSON_ORGCODE, storeId);
rObj.insert(JSON_PASSWORD, password);
rObj.insert(JSON_MACHINECODE, stationId);
rObj.insert(JSON_PLUGINVERSION, APP_VERSION);
rObj.insert(JSON_PLUGINVERSIONCOMMENTS, versionComments);
//rObj.insert(JSON_USERID, cashierId);
return rObj;
}
......
......@@ -44,7 +44,7 @@ public:
* 返回:登录数据
* */
QJsonObject GetLoginData(const QString& partnerId,const QString& storeId, const QString& password,
const QString& stationId, const QString& cashierId,const QString& ipAddress);
const QString& stationId, const QString& cashierId,const QString& ipAddress, const QString &versionComments);
/* 功能:获取心跳数据
* 参数:[1]门店号[2]密码[3]收银机号[4]收银员号
* 返回:登录数据
......
......@@ -140,21 +140,22 @@ bool PrintCupStickPosDB::insertOrderProduct(OrderObject* orderObj,const QString&
for (int i=0; i < orderObj->coupList.count(); i++) {
CouponsObject* coupon = orderObj->coupList.at(i);
query.prepare("INSERT INTO tb_main_prod_refinfo(chk_num, order_id, order_status, create_datetime, "
" prod_seq, prod_code, prod_name, prod_qty, prod_price, "
" prod_seq, prod_code, prod_name, prod_resv3, prod_qty, prod_price, "
" coupon_seq, coupon_code, coupon_name, coupon_qty,"
" coupon_factPrice, coupon_discountPrice, coupon_discountCode, coupon_discountName ,"
" coupon_storeChannel, coupon_isCoupon, coupon_payMethodId, coupon_payMethodName,"
" coupon_showGiver, coupon_giver, coupon_wishes) "
" VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,?)");
" VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,? ,?)");
query.addBindValue(posCheckNo.toInt()); // --小票号
query.addBindValue(orderObj->id); // --订单编号
query.addBindValue(orderObj->orderStatus); // --订单状态(int);
query.addBindValue(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss")); // --商品入库时间
query.addBindValue(i+1); // --主商品序号;
query.addBindValue(coupon->skus[0]->code); // --主商品名称
query.addBindValue(coupon->skus[0]->name); // --主商品价格
query.addBindValue(coupon->skus[0]->qty); // --主商品名称
query.addBindValue(coupon->skus[0]->code); // --主商品 SKU
query.addBindValue(coupon->skus[0]->name); // --主商品名称
query.addBindValue(coupon->skus[0]->nickname); // --主商品昵称
query.addBindValue(coupon->skus[0]->qty); // --主商品数量
query.addBindValue(coupon->skus[0]->price); // --主商品价格
query.addBindValue(i+1); // --主商品序号;
......@@ -177,15 +178,15 @@ bool PrintCupStickPosDB::insertOrderProduct(OrderObject* orderObj,const QString&
if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database: Insert tb_main_prod_refinfo Error--->>>>]"<<query.lastError().text()<<QString::number(query.lastError().type());
QLOG_INFO()<<QString("INSERT INTO tb_main_prod_refinfo(chk_num, order_id, order_status, create_datetime, "
" prod_seq, prod_code, prod_name, prod_qty, prod_price, "
" prod_seq, prod_code, prod_name, prod_resv3, prod_qty, prod_price, "
" coupon_seq, coupon_code, coupon_name, coupon_qty,"
" coupon_factPrice, coupon_discountPrice, coupon_discountCode, coupon_discountName ,"
" coupon_storeChannel, coupon_isCoupon, coupon_payMethodId, coupon_payMethodName,"
" coupon_showGiver, coupon_giver, coupon_wishes) "
"VALUES(%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17, %18, %19, %20, "
" %21, %22, %23, %24)").arg(posCheckNo.toInt())
" %21, %22, %23, %24, %25)").arg(posCheckNo.toInt())
.arg(orderObj->id).arg(orderObj->orderStatus).arg(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss"))
.arg(i+1).arg(coupon->skus[0]->code).arg(coupon->skus[0]->name).arg(coupon->skus[0]->qty).arg(coupon->skus[0]->price)
.arg(i+1).arg(coupon->skus[0]->code).arg(coupon->skus[0]->name).arg(coupon->skus[0]->nickname).arg(coupon->skus[0]->qty).arg(coupon->skus[0]->price)
.arg(i+1).arg(coupon->code).arg(coupon->name).arg(1).arg(coupon->consumeFactAmount).arg(coupon->consumeDiscountAmount)
.arg(coupon->discount).arg(coupon->discountName).arg(coupon->storeChannel).arg(coupon->skus[0]->isCoupon)
.arg(coupon->payMethodId).arg(coupon->payMethodName).arg(coupon->isShowGiver).arg(coupon->giverName).arg(coupon->blessingWords);
......@@ -233,9 +234,9 @@ bool PrintCupStickPosDB::insertOrderProduct(OrderObject* orderObj,const QString&
query.addBindValue(dish->qty); // --主商品数量
query.addBindValue(dish->options); // --主商品客制换Options;
query.addBindValue(dish->promotionPrice * dish->promotionQty); // --主商品 优惠折扣金额;
query.addBindValue(dish->promotionName); // --主商品 优惠折扣名;
query.addBindValue( dish->promotionName.left(25) ); // --主商品 优惠折扣名;
query.addBindValue(dish->starPromotionPrice * dish->starPromotionQty); // --主商品 星星折扣金额;
query.addBindValue(dish->starPromotionName); // --主商品 星星折扣名;
query.addBindValue( dish->starPromotionName.left(25) ); // --主商品 星星折扣名;
query.addBindValue(dish->userName); // --主商品-Owner 拼单人;
if(!query.exec()) {
......
#ifndef PRINTMSGQUEUEDB_H
#define PRINTMSGQUEUEDB_H
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QObject>
#include <QMutex>
#include <Model/orderObject.h>
#include "preDefine.h"
#include "windows.h"
class PrintMsgQueueDB : public QObject
{
Q_OBJECT
public:
// explicit PrintMsgQueueDB(QObject *parent = 0);
static PrintMsgQueueDB& getInstance();
/**
*功能:初始化pos本地数据库;方便后期判断 打开pos本地数据库是否成功;
*参数:[无]
*返回:true:能够成功打开POS本地数据库,false:不能够成功打开POS本地数据库
**/
bool initPrintMsgQueueDB();
/**
*功能:插入一条 打印订单消息 到pos本地数据库中;
*参数:[1]订单对象指针 [2]小票号
*返回:true操作成功,false失败
**/
bool insertOrderPrtMsg(OrderObject* orderObj, const QString& posCheckNo);
/**
*功能: 根据订单对象指针 更新 pos本地数据库中 打印订单消息队列表中状态;
*参数:[1]订单对象指针
*返回:true操作成功,false失败
**/
bool updatePrintMsgStatus(OrderObject* orderObj, const int &printStatus);
/**
*功能:查询 订单号和小票号 的打印消息队列记录 是否存在本地的POS系统中;
*参数:[1]订单号 [2]小票号
*返回:true是,false否
**/
bool isOrderSaleRefoundPrtMsgExist(const QString& orderId, const int& orderStatus );
/**
*功能:查询订单的打印消息记录是否存在本地的POS系统中;
*参数:[1]订单号
*返回:true是,false否
**/
bool isOrderPrtMsgExist(const QString& orderId);
/**
*功能:删除本地数据库中的 订单打印消息队列;
*参数:[1] 删除日期;
*返回:true 删除成功,false 删除失败;
**/
bool deleteProductRecord(QString creatTime);
private:
QMutex m_mutex;
PrintMsgQueueDB();
PrintMsgQueueDB(PrintMsgQueueDB const&);
PrintMsgQueueDB& operator=(PrintMsgQueueDB const&);
QSqlDatabase m_sqlDb;
signals:
public slots:
};
#endif // PRINTMSGQUEUEDB_H
......@@ -534,13 +534,14 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
return false;
}
bool result;
QSqlQuery query(m_sqlDb);
query.prepare("INSERT INTO tb_msr_customer_info(chk_num, last_name, full_name, gender, "
" is_birthday, create_datetime, created_by, modify_datetime, modified_by, accept_name, accept_address, accept_phone, order_id, "
" order_status, waybill_id, take_no, deliver_phone, deliver_name, disPlateformFee, memo, reserve3, reserve4, reserve0, "
" order_status, waybill_id, take_no, deliver_phone, deliver_name, disPlateformFee, memo, reserve3, reserve4, reserve0, reserve6, reserve7, "
" appointed_time, appointed_remindTemplate, order_type, channel, platform_source,"
" pay_way, customer_id, customer_name, msr_no, store_id, sub_store_id, store_name, store_address, is_package, order_discount, total_price) "
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )");
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?, ?)");
query.addBindValue(posCheckNo.toInt()); // --小票号
query.addBindValue(orderObj->lastName); // --顾客-姓
query.addBindValue(orderObj->consigneeName); // --顾客-全名
......@@ -558,7 +559,6 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd ") + posCheckTime : qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss");
query.addBindValue(posCheckOpenTime); // --POS开单时间
query.addBindValue(FlowControl::GetInstance()._GetCashierId()); // --订单处理者
query.addBindValue(""); // --变更订单时间 //??????????????????????????????????????????
query.addBindValue(""); // --变更订单作者 [*****后期更新*****]
......@@ -587,13 +587,14 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
}
query.addBindValue( tempBusinessType ); // --订单业务类型: 10:预约单 20:WSG-杯贴祝福 30:拼团
query.addBindValue( orderObj->globalOrderType );
query.addBindValue( orderObj->globalServiceType );
query.addBindValue(orderObj->expectDate); // -- 预约取餐时间
QString tempAppointedRemindTemplate = QString::number(orderObj->inAdvanceTakemeal) + ";" + orderObj->reserveMakeTime; // 预约模板;
query.addBindValue(tempAppointedRemindTemplate);
query.addBindValue(orderObj->orderType);
QString tempChannel = ("WSG-MOD" == orderObj->channel)?"MOD" :orderObj->channel;
query.addBindValue(tempChannel);
query.addBindValue(orderObj->platformSource);
query.addBindValue(orderObj->payWay);
......@@ -608,7 +609,6 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
query.addBindValue(orderObj->orderDiscount);
query.addBindValue(orderObj->totalPrice);
QLOG_INFO()<<QString("[<<<--PrintSumBillPosDB::insertOrderSumBill waybillId:%1-->>>>]").arg((orderObj->waybillId).length()?orderObj->waybillId:QString("0"));
if(!query.exec())
......@@ -618,19 +618,19 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
QLOG_INFO()<<QString("INSERT INTO tb_msr_customer_info(chk_num, last_name, full_name, gender, "
" is_birthday, create_datetime, created_by, modify_datetime, modified_by, "
" accept_name, accept_address, accept_phone, order_id, "
" waybill_id, take_no, deliver_phone, deliver_name, disPlateformFee, memo, reserve3, reserve4, reserve0,"
" waybill_id, take_no, deliver_phone, deliver_name, disPlateformFee, memo, reserve3, reserve4, reserve0, reserve6, reserve7,"
" appointed_time, appointed_remindTemplate, order_type, channel, platform_source,"
" pay_way, customer_id, customer_name, msr_no, store_id, sub_store_id, store_name, store_address, is_package, order_discount, total_price) "
"VALUES(%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17, %18,"
" %19, %20, %21, %22, %23, %24, %25, %26, %27, %28, %29, %30,%31, %32, %33, %34, %35, %36, %37, %38, %39)").arg(posCheckNo.toInt())
" %19, %20, %21, %22, %23, %24, %25, %26, %27, %28, %29, %30,%31, %32, %33, %34, %35, %36, %37, %38, %39, %40, %41)").arg(posCheckNo.toInt())
.arg(orderObj->lastName).arg(orderObj->customerName).arg(temp_customerSex)
.arg(0).arg(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss")).arg(FlowControl::GetInstance()._GetCashierId()).arg("").arg("")
.arg(orderObj->consigneeName).arg(orderObj->addressDetail).arg(orderObj->consigneePhone).arg(orderObj->id)
.arg((orderObj->waybillId).length()?orderObj->waybillId:QString("0"))
.arg(orderObj->pickupCode.length()==0?0:orderObj->pickupCode.toInt())
.arg(orderObj->riderPhone).arg(orderObj->riderName).arg(abs(orderObj->disPlateformFee))
.arg(orderObj->memo).arg(orderObj->secretSignal).arg(orderObj->consumerRemark).arg( tempBusinessType ).arg(orderObj->expectDate)
.arg(tempAppointedRemindTemplate).arg(orderObj->orderType).arg(orderObj->channel).arg(orderObj->platformSource).arg(orderObj->payWay)
.arg(orderObj->memo).arg(orderObj->secretSignal).arg(orderObj->consumerRemark).arg( tempBusinessType ).arg(orderObj->globalOrderType).arg(orderObj->globalServiceType)
.arg(orderObj->expectDate).arg(tempAppointedRemindTemplate).arg(orderObj->orderType).arg(orderObj->channel).arg(orderObj->platformSource).arg(orderObj->payWay)
.arg(orderObj->customerId).arg(orderObj->customerName).arg(orderObj->msr_no).arg(orderObj->storeId).arg(orderObj->subStoreId)
.arg(orderObj->storeName).arg(orderObj->storeAddress).arg(orderObj->isPackage).arg(orderObj->orderDiscount).arg(orderObj->totalPrice);
} else {
......
......@@ -131,14 +131,13 @@ void OrderObject::FetchDataFromJson(const QJsonObject &json)
QString OrderObject::getChannelName()
{
QLOG_INFO() << QString("[<<<<---OrderObject:getChannelName [%1]--->>>>]").arg(channel);
if ( "MOD" == channel ) {
if ( 3 == orderType ) {
return QString::fromLocal8Bit("星-客诉");
}else if ( 7 == orderType ) {
return QString::fromLocal8Bit("预-MOD");
return QString::fromLocal8Bit("预-MOD");
}else if ( 8 == orderType ) {
return QString::fromLocal8Bit("拼-MOD");
return QString::fromLocal8Bit("拼-MOD");
} else {
if ( "4" == platformSource ) {
return QString::fromLocal8Bit("微信-MOD");
......@@ -151,15 +150,19 @@ QString OrderObject::getChannelName()
return QString::fromLocal8Bit("微信用星说");
}else if("ELE" == channel){
return QString::fromLocal8Bit("饿了么");
if ( 7 == orderType ) {
return QString::fromLocal8Bit("预-饿了么");
} else {
return QString::fromLocal8Bit("饿了么");
}
}else if ( "MOP" == channel ){
if ( 4 == orderType ) {
return QString::fromLocal8Bit("星-自测");
} else if ( 7 == orderType ) {
return QString::fromLocal8Bit("预-MOP");
return QString::fromLocal8Bit("预-MOP");
} else if ( 8 == orderType ) {
return QString::fromLocal8Bit("拼-MOP");
return QString::fromLocal8Bit("拼-MOP");
} else {
if ( "5" == platformSource ) {
return QString::fromLocal8Bit("口碑-MOP");
......
......@@ -89,6 +89,9 @@ class OrderObject : public QObject
Q_PROPERTY (int inAdvanceTakemeal READ getInAdvanceTakemeal WRITE setInAdvanceTakemeal)
Q_PROPERTY (QString subStoreId READ getSubStoreId WRITE setSubStoreId)
Q_PROPERTY (int globalServiceType READ getGlobalServiceType WRITE setGlobalServiceType)
Q_PROPERTY (int globalOrderType READ getGlobalOrderType WRITE setGlobalOrderType)
public:
OrderObject(QObject *parent=0)
:QObject(parent){}
......@@ -187,6 +190,9 @@ public:
int inAdvanceTakemeal; // 预约单提前到店标志【新增字段:int】
QString subStoreId; // 子门店号 【新增字段:string】
int globalServiceType; // 全链路服务类型: globalServiceType【新增字段:int】
int globalOrderType; // 全链路订单类型: globalOrderType 【新增字段:int】
int forwardPosStatus; // 正向单入机状态: 0:未知 1: 成功 2:失败;
int negativePosStatus; // 负向单同上;
int deliveryStatus;
......@@ -438,6 +444,12 @@ public:
inline QString getSubStoreId()const{return subStoreId;}
inline void setSubStoreId(const QString& v){subStoreId = v;}
inline int getGlobalServiceType()const{return globalServiceType;}
inline void setGlobalServiceType(const int& v){globalServiceType = v;}
inline int getGlobalOrderType()const{return globalOrderType;}
inline void setGlobalOrderType(const int& v){globalOrderType = v;}
};
#endif // ORDEROBJECT_H
......@@ -14,6 +14,7 @@ class SingleProductObject : public QObject
Q_PROPERTY (int qty READ getQty WRITE setQty)
Q_PROPERTY (int price READ getPrice WRITE setPrice)
Q_PROPERTY (bool isCoupon READ getIsCoupon WRITE setIsCoupon)
Q_PROPERTY (QString nickname READ getNickname WRITE setNickname)
public:
explicit SingleProductObject(QObject *parent = 0):QObject(parent){}
......@@ -25,6 +26,7 @@ public:
int qty;
int price;
bool isCoupon; //此单品是否是券;
QString nickname; //券商品昵称
protected:
inline QString getCode(){ return code; }
......@@ -42,6 +44,8 @@ protected:
inline bool getIsCoupon(){ return isCoupon; }
inline void setIsCoupon(const bool& v){ isCoupon = v; }
inline QString getNickname(){ return nickname; }
inline void setNickname(const QString& v){ nickname = v; }
};
......
......@@ -60,7 +60,8 @@ SOURCES += main.cpp\
Model/couponsObject.cpp \
Model/singleProductObject.cpp \
Model/paymentObject.cpp \
DTools/printCupStickPosDB.cpp
DTools/printCupStickPosDB.cpp \
DTools/printMsgQueueDB.cpp
HEADERS += \
mainForm.h \
......@@ -99,7 +100,8 @@ HEADERS += \
Model/couponsObject.h \
Model/singleProductObject.h \
Model/paymentObject.h \
DTools/printCupStickPosDB.h
DTools/printCupStickPosDB.h \
DTools/printMsgQueueDB.h
FORMS += mainForm.ui \
alertForm.ui \
......
......@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 2,2020,6,29
PRODUCTVERSION 2,2020,6,29
FILEVERSION 2,2020,7,29
PRODUCTVERSION 2,2020,7,29
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
......@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO
VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2020.6.29"
VALUE "FileVersion", "2.2020.6.29"
VALUE "ProductVersion", "2.2020.7.29"
VALUE "FileVersion", "2.2020.7.29"
//*************************************************************************//
END
END
......
......@@ -27,7 +27,8 @@
//#define APP_VERSION "2.2020.26.1"
//#define APP_VERSION "2.2020.312.1"
//#define APP_VERSION "2.2020.5.26"
#define APP_VERSION "2.2020.6.29"
//#define APP_VERSION "2.2020.6.29"
#define APP_VERSION "2.2020.7.29"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
......@@ -63,6 +64,7 @@
#define INI_STOREID "Software/storeid"
#define INI_POSNO "Software/posno"
#define INI_SUBSTOREID "Software/substoreid"
#define INI_SUBSTORESKIPVERIFY "Software/substoreSkipVerify"
#define INI_PASSWORD "Software/password"
#define INI_AUTOCONFIRM "Software/autoconfirm"
#define INI_PARTNERID "Software/partnerid"
......@@ -96,6 +98,8 @@
#define JSON_STATUS "status"
#define JSON_ORDERSTATUS "orderStatus"
#define JSON_REFUNDFMID "refundFmId"
#define JSON_GLOBALORDERTYPE "globalOrderType"
#define JSON_GLOBALSERVICETYPE "globalServiceType"
#define JSON_STATUSDESC "status_desc"
#define JSON_MESSAGE "message"
#define JSON_ERRMSG "message"
......
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