Commit a79bb366 by wuyang.zou

Add Table Column For Save Local Order Input Pos Record

Add ActionId:14 For Query Record History
Add New Feature: Skip Print & Retry Input Pos
parent d492f27e
......@@ -159,22 +159,11 @@ FlowControl::FlowControl()
.arg(m_initCheckPoskeyExistPosDBRet?1:0).arg(m_initSaveNoticeMsgDBRet?1:0);
// FlowControl() 初始化时,接受信号的槽对象还没有实例化,所以在此时发信号没有用;
/* emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("尝试打开POS本地数据库(MMXB**)失败"));
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("尝试打开POS本地数据库(DataS**)失败"));
*/
/*** 启动Http服务:用来响应Simphony_Script获取订单的请求***/
/*** 启动Http服务:用来响应: ① Simphony_Script获取订单数据请求; ② 响应上游fulfillment Service推单+推送通告+门店开关店状态【回调发生在新的线程内】***/
loaclHttpServer = new LoaclHttpServer();
loaclHttpServer->run();
/* 启动Http服务:用来响应 Http 获取订单的请求
JQHttpServer::TcpServerManage* m_tcpServerManage = new JQHttpServer::TcpServerManage(10);
m_tcpServerManage->setHttpAcceptedCallback( [this]( const QPointer< JQHttpServer::Session > &session )
{
QLOG_INFO()<< "[<<<<---FlowControl::Receive Http Request:currentThreadId:--->>>>]" << QThread::currentThreadId();
// 回调发生在新的线程内; //解析FM外卖插件HTTP服务 与 Http 请求的会话连接是否断开: 会话连接未断开
}
*/
_ClickOMSAssignArea();
m_loginTimer->start(10*1000);
......@@ -213,10 +202,10 @@ void FlowControl::_GetIpAddress()
}
void FlowControl::_AddOrderPull(const QString &orderId, const QString &channel, const QString& callBackUrl, const int &pageNumber, const int &pageSize)
void FlowControl::_AddOrderPull(const QString& orderId, const QString& channel, const QString& callBackUrl, const bool& skipPrint, const int& pageNumber, const int& pageSize)
{
bool btryLock = m_PullOrderDataMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
if (btryLock) {
if ( btryLock ) {
/***组装从FM外卖service端的拉单请求参数***/
PullOrderInfo* orderPull = new PullOrderInfo();
orderPull->orderId=orderId;
......@@ -224,17 +213,18 @@ void FlowControl::_AddOrderPull(const QString &orderId, const QString &channel,
orderPull->pageNumber=pageNumber;
orderPull->pageSize=pageSize;
orderPull->callBackUrl=callBackUrl;
orderPull->skipPrint=skipPrint;
orderPull->pullErrorCount = 0;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_AddOrderPull orderId: %1 , callBackUrl: %2--->>>>]").arg(orderId).arg(callBackUrl);
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_AddOrderPull orderId: %1 , callBackUrl: %2 , skipPrint: %3 --->>>>]").arg(orderId).arg(callBackUrl).arg( skipPrint ? 1 : 0 );
m_orderPullList.append(orderPull);
m_PullOrderDataMutex.unlock();
}else {
} else {
QLOG_ERROR()<<QString::fromLocal8Bit("[<<<<---FlowControl::_AddOrderPull orderId:%1 tryLock Faild--->>>>]").arg(orderId);
}
}
bool FlowControl::_TryAddOrderPull(const QString &orderId, const QString &channel, const QString &callBackUrl, const int &pageNumber, const int &pageSize)
bool FlowControl::_TryAddOrderPull(const QString& orderId, const QString& channel, const QString& callBackUrl, const bool& skipPrint, const int& pageNumber, const int& pageSize)
{
bool btryLock = m_PullOrderDataMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
if (btryLock) {
......@@ -419,7 +409,7 @@ void FlowControl::_StoragePosOrderData() {
QString orderId = m_storagePosOrdersList.first();
OrderObject* order_p = m_FmOrdersMap.value(orderId);
if ( !order_p ) {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 OrderObject* Is Null --->>>>]").arg(orderId);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 OrderObject* Is Null --->>>>]").arg(orderId);
// 订单对象空指针,无需考虑加锁,直接移除此订单号;
m_storagePosOrdersList.removeOne(orderId);
return;
......@@ -430,7 +420,7 @@ void FlowControl::_StoragePosOrderData() {
order_p->dataBaseIsCancleInt,order_p->dataBaseIsORSPushInt,order_p->dataBaseIsORSCancleInt,order_p->dataBasePosOrderCheckNo);
if ( order_p->orderStatus != OrderObject::Refunded && order_p->dataBaseIsPushInt ) {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Had Save 4 Core Table DB And Set Sale Flag Is True Successed --->>>>]").arg(orderId);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Had Save 4 Core Table DB And Set Sale Flag Is True Successed --->>>>]").arg(orderId);
m_storagePosOrdersList.removeOne(orderId);
return;
}
......@@ -449,7 +439,7 @@ void FlowControl::_StoragePosOrderData() {
bool checkProductValidRet = true;
if(!bRetStorageOrderMutex) {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 m_storageOrderMutex.tryLock Failed --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 m_storageOrderMutex.tryLock Failed --->>>>]").arg(order_p->id);
return;
}
......@@ -458,21 +448,21 @@ void FlowControl::_StoragePosOrderData() {
if ( PrintCupStickPosDB::getInstance().isOrderProductExist(order_p) ) {
syncDbSuccessNum++;
// 销售单/退货单: 商品表 需存储2份数据(退货金额需要存储为负数);
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Product Data Had Exist --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Product Data Had Exist --->>>>]").arg(order_p->id);
} else {
if ( PrintCupStickPosDB::getInstance().insertOrderProduct(order_p, posCheckNo, checkProductValidRet) ) {
syncDbSuccessNum++;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Product Data Success--->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert Product Data Success--->>>>]").arg(order_p->id);
} else {
syncOrderProductTbRet = false;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Product Data Failed --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert Product Data Failed --->>>>]").arg(order_p->id);
}
}
/***** 更新 POS本地数据库的商品数据是否成功;end:********/
// 检查商品数据无效订单, 需要将 ①移除待存储队列,②订单迁移到 异常单 Tab 页, ③向OMS汇报订单入库情况(在检查类中汇报).
if ( !checkProductValidRet ) {
QLOG_ERROR() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 checkProductValidRet Is False --->>>>]").arg(order_p->id);
QLOG_ERROR() << QString("[<<<<---_StoragePosOrderData: orderId: %1 checkProductValidRet Is False --->>>>]").arg(order_p->id);
// ①移除待存储队列
m_storagePosOrdersList.removeOne(order_p->id);
m_storageOrderMutex.unlock();
......@@ -498,19 +488,19 @@ void FlowControl::_StoragePosOrderData() {
if ( PrintOrderPromotionDB::getInstance().isOrderPromotionExist(order_p) ) {
syncDbSuccessNum++;
// 销售单/退货单: 促销优惠表 需存储2份数据(退货金额需要存储为负数);
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Promotion Data Had Exist --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Promotion Data Had Exist --->>>>]").arg(order_p->id);
} else {
if ( syncOrderProductTbRet ) {
if ( PrintOrderPromotionDB::getInstance().insertOrderPromotion(order_p, posCheckNo) ) {
syncDbSuccessNum++;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Promotion Data Success--->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert Promotion Data Success--->>>>]").arg(order_p->id);
} else {
syncOrderPromotionTbRet = false;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Promotion Data Failed --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert Promotion Data Failed --->>>>]").arg(order_p->id);
}
} else {
syncOrderPromotionTbRet = false;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Product Failed, So No Need Insert Promotion --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert Product Failed, So No Need Insert Promotion --->>>>]").arg(order_p->id);
}
}
......@@ -522,7 +512,7 @@ void FlowControl::_StoragePosOrderData() {
// 2.0解耦POS->不入机流程分支: 需要在此处排队时进行数据存储;
if ( PrintSumBillPosDB::getInstance().isOrderSumBillExist(order_p) ) {
syncDbSuccessNum++;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 SumBill Data Had Exist --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 SumBill Data Had Exist --->>>>]").arg(order_p->id);
// 销售单/退货单: 汇总表 需存储2份数据(退货记录中chk_num值 与 销售记录中chk_num值 不等);
// 汇总表中数据需同步更新订单状态, 此操作在解析订单数据函数( _OrderAnalysis )中已更新DB中订单的状态;
// 预约单->提前到店类似的变更不会走入机/存储的排队模式,所以需要在 解析订单数据函数( _OrderAnalysis )中就要更新DB中订单状态;
......@@ -531,10 +521,10 @@ void FlowControl::_StoragePosOrderData() {
// 0:未入机提前插入数据时默认小票号为0; 开单时间默认为空:insertOrderSumBill 函数内会以当前时间存储;
if ( PrintSumBillPosDB::getInstance().insertOrderSumBill(order_p, posCheckNo, "") ) {
syncDbSuccessNum++;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert SumBill Data Success--->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert SumBill Data Success--->>>>]").arg(order_p->id);
} else {
syncOrderSumBillTbRet = false;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert SumBill Data Failed --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert SumBill Data Failed --->>>>]").arg(order_p->id);
}
}
......@@ -554,20 +544,26 @@ void FlowControl::_StoragePosOrderData() {
syncDbSuccessNum++;
// 销售单/退货单: 打印表需存储2份数据(退货记录中chk_num值 与 销售记录中chk_num值 不等);
//【订单接单后立即被取消, 也无法取消销售单的打印了】;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 PrintMsgQueue Data Had Exist --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 PrintMsgQueue Data Had Exist --->>>>]").arg(order_p->id);
} else {
if ( order_p->skipPrint ) { // 补单场景: 跳过打印;
syncDbSuccessNum++;
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 No Need Insert PrintMsgQueue Data, Order SkipPrint: %2--->>>>]").arg(order_p->id).arg(order_p->skipPrint ?1:0);
} else { // 非补单场景, 需要提前存储订单记录到打印队列表中;
// 0:未入机提前插入数据时默认小票号为0;
if ( PrintMsgQueueDB::getInstance().insertOrderPrtMsg(order_p, posCheckNo) ) {
syncDbSuccessNum++;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert PrintMsgQueue Data Success--->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert PrintMsgQueue Data Success--->>>>]").arg(order_p->id);
} else {
syncOrderPrtMsgTbRet = false;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert PrintMsgQueue Data Failed --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert PrintMsgQueue Data Failed --->>>>]").arg(order_p->id);
}
}
}
} else {
syncOrderPrtMsgTbRet = false;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Local Table Count < 3, So No Need Insert PrintMsgQueue Data --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert Local Table Count < 3, So No Need Insert PrintMsgQueue Data --->>>>]").arg(order_p->id);
}
} else {
......@@ -582,7 +578,7 @@ void FlowControl::_StoragePosOrderData() {
if ( order_p->decouplePosVersion >= 20 || m_hurryPrintSum ) {
// 2.0解耦POS->不入机流程分支: 需要在此处进行数据校验 是否都存储成功 / 并汇报存储情况;
if ( 4 == syncDbSuccessNum ) {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert 4 Tables Data Success, Prepare Report Oms--->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert 4 Tables Data Success, Prepare Report Oms--->>>>]").arg(order_p->id);
// 解耦POS标识作为最后标识尺度; 避免后期 解耦和 先打印后存储模式的 同时存在;
if ( order_p->decouplePosVersion >= 20 ) {
......@@ -609,7 +605,7 @@ void FlowControl::_StoragePosOrderData() {
order_p->dataBasePosOrderCheckNo = posCheckNo;
} else {
QLOG_ERROR() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert 4 Tables Data Failed, Prepare Report Oms--->>>>]").arg(order_p->id);
QLOG_ERROR() << QString("[<<<<---_StoragePosOrderData: orderId: %1 Insert 4 Tables Data Failed, Prepare Report Oms--->>>>]").arg(order_p->id);
// 解耦POS标识作为最后标识尺度; 避免后期 解耦和 先打印后存储模式的 同时存在;
// 由于在落库前就会进行 订单商品有效性进行检查: 落库失败:准备将订单数据落库失败的报文消息汇报给 OMS;
// <1>检查商品有效: 则是表字段过长导致插入失败,必须向OMS汇报存储情况;
......@@ -703,7 +699,7 @@ void FlowControl::_ScanDelayGetRefundDetailList() {
QLOG_ERROR()<< QString("[<<<<---_ScanDelayGetRefundDetailList: m_delayGetRefundDetailList's Fisrt Item delayPullOrder_p Is empty(3 list All Empty)--->>>>>]");
continue;
}
if ( _TryAddOrderPull( delayPullOrder_p->orderId, delayPullOrder_p->channel, delayPullOrder_p->callBackUrl ) ) {
if ( _TryAddOrderPull( delayPullOrder_p->orderId, delayPullOrder_p->channel, delayPullOrder_p->callBackUrl, delayPullOrder_p->skipPrint ) ) {
delete delayPullOrder_p;
delayPullOrder_p = nullptr;
} else {
......@@ -771,7 +767,7 @@ void FlowControl::_ScanDelayGetRefundDetailList() {
}
// Case4: 筛选出来 无需延迟获取退单详情的订单 需要添加到 正常的获取订单详情的队列中;
if ( _TryAddOrderPull( delayPullOrder_p->orderId, delayPullOrder_p->channel, delayPullOrder_p->callBackUrl ) ) {
if ( _TryAddOrderPull( delayPullOrder_p->orderId, delayPullOrder_p->channel, delayPullOrder_p->callBackUrl, delayPullOrder_p->skipPrint ) ) {
delete delayPullOrder_p;
delayPullOrder_p = nullptr;
} else {
......@@ -841,9 +837,12 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->deliveryType = 0;
orderObject->isGiftitForward = 0 ;
orderObject->callBackUrl = "";
orderObject->skipPrint = false;
orderObject->privacyPhone = "";
orderObject->FromJson(jsonObject);
// 更新订单详情数据 赋值到 OrderObject 对象中;
orderObject->pushOrderType=0;
orderObject->orsPushOrderType = 0;
orderObject->isPush = false;
......@@ -1254,7 +1253,7 @@ bool FlowControl::_Login()
m_storageOrderTimer->start(10*1000);
m_delayGetRefundDetailTimer->start(15*1000);
m_remindCasherBlinkFloatTimer->start(5*1000);
//_AddOrderPull(QString(),QString());
//在登陆时再次检查数据库连接是否都正常;
if( !m_initSimProcOrderDBRet || !m_initPrintSumBillPosDBRet || !m_initGetAuthPosDBRet || !m_initPrintCupStickPosDBRet
|| !m_initPrintMsgQueueDBRet || !m_initPrintOrderPromotionDBRet || !m_initCheckPoskeyExistPosDBRet || !m_initSaveNoticeMsgDBRet)
......@@ -1363,7 +1362,7 @@ void FlowControl::_PullOrderData()
m_orderPullList.append(info);
}
} else {
if ( _PullOrderDetail( info->orderId, info->channel, info->callBackUrl ) ) {
if ( _PullOrderDetail( info->orderId, info->channel, info->callBackUrl, info->skipPrint ) ) {
QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderDetail successful---->>>>>]";
m_orderPullList.removeOne(info);
delete info;
......@@ -1379,7 +1378,7 @@ void FlowControl::_PullOrderData()
return ;
}
bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channel, const QString &callBackUrl, const bool &skipErrorDisplay)
bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channel, const QString &callBackUrl, const bool& skipPrint, const bool &skipErrorDisplay)
{
if(m_pullOrderSocket==NULL)
m_pullOrderSocket =new BillSocket(this);
......@@ -1413,12 +1412,12 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe
result = m_pullOrderSocket->GetRequest(recvJson, error);
QLOG_INFO() << QString("[<<<<---Pull Order Detail Finsh--->>>>][result:%1][msg:%2]").arg(result).arg(error)<<recvJson;
if(!result) {
if ( !result ) {
if ( !skipErrorDisplay ) {
emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>"));
}
} else {
qDebug()<<recvJson;
emit setNetStatus(QString::fromLocal8Bit("正常"));
if(JSON_STATUSCODE_OK != recvJson[JSON_ERRCODE].toInt())
{
......@@ -1430,20 +1429,31 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe
result=false;
} else {
QJsonObject order = recvJson[JSON_DATA].toObject();
if ( !order.contains("callBackUrl") ) {
order.insert( "callBackUrl", callBackUrl );
// 服务端返回 code=100 , 但订单体中无订单详情数据;
if ( !order.contains( JSON_ID ) ) {
QLOG_ERROR()<<QString("[<<<<---Pull Order Detail Failed, OrderId= %1, Channel= %2 Code= 100, But 'data' Is Empty --->>>>]").arg( orderId ).arg( channel );
// 此种情况: 肯定服务端服务异常, 即使 result = false,下次拉单, 依旧还会失败, 顾再次放弃此订单详情的继续拉取;
} else {
if ( !order.contains( JSON_CALL_BACK_URL ) ) {
order.insert( JSON_CALL_BACK_URL, callBackUrl );
}
if ( !order.contains( JSON_SKIP_PRINT ) ) {
order.insert( JSON_SKIP_PRINT, skipPrint );
}
_OrderAnalysis(order);
}
}
}
/*解析json数据失败则20秒后重新拉单*/
if(!result) {
if ( !result ) {
m_pullTimer->start(1000*20);
// 如果某次拉订单列表出现失败;此函数的外层函数 _PullOrderData:会将本次拉单对象存起来,等待下次拉取;
} else {
m_pullTimer->start(1000*6);
}
qDebug()<<"[<<<<---Pull Order Detail Result--->>>>]"<<result;
QLOG_INFO() << QString("[<<<<---Pull Order Detail Final Result: %1 --->>>>]").arg( result ? 1 : 0);
return result;
}
......@@ -1508,7 +1518,11 @@ bool FlowControl::_PullOrderList( const int &pageSize, const int &pageNo, const
QJsonArray orders = recvJson[JSON_DATA].toObject()[JSON_ORDERS].toArray();
foreach ( QJsonValue order, orders ) {
_OrderAnalysis(order.toObject());
QJsonObject orderObject = order.toObject();
// 订单 JsonObject -> OrderObject 前数据安全检查;
if ( orderObject.contains(JSON_ID) ) {
_OrderAnalysis( orderObject );
}
}
ordertotalSum = recvJson[JSON_DATA].toObject()[JSON_COUNT].toInt();
......@@ -2296,6 +2310,9 @@ bool FlowControl::_ResponseHttpRequest(const QJsonObject &content,QJsonObject &d
case 13: //推送 宣导提醒消息
result=_ResponseOMS13Request(content,data,error);
break;
case 14: //推送 订单入机查询状态;
result=_ResponseOMS14Request(content,data,error);
break;
case 21://盒马生鲜 推送订单
result=_ResponseHM21Request(content,data,error);
break;
......@@ -2449,16 +2466,17 @@ bool FlowControl::_ResponseSimphony04Request(const QJsonObject &content, QJsonOb
if ( PrintMsgQueueDB::getInstance().isOrderPrtMsgExist(order_p) ) {
insertPrtMsgRet = true;
} else {
if (m_hurryPrintSum) {
QLOG_INFO()<<QString("[<<<<---_ResponseSimphony04Request::orderId:%1 Is HurryPrintSum, No Need Insert PrintMsgQueueDB, Because Recive Order Had Storage, Can't Change CheckNo--->>>>]").arg(orderId);
if ( order_p->skipPrint ) { // 补单场景: 跳过打印;
insertPrtMsgRet = true;
QLOG_INFO()<< QString("[<<<<---_ResponseSimphony04Request: orderId: %1 Is SkipPrint, No Need Insert PrintMsgQueueDB, SkipPrint: %2--->>>>]").arg(order_p->id).arg(order_p->skipPrint ?1:0);
} else if ( m_hurryPrintSum ) {
QLOG_INFO()<<QString("[<<<<---_ResponseSimphony04Request: orderId:%1 Is HurryPrintSum, No Need Insert PrintMsgQueueDB, Because Recive Order Had Storage, Can't Change CheckNo--->>>>]").arg(orderId);
insertPrtMsgRet = true;
} else {
insertPrtMsgRet = PrintMsgQueueDB::getInstance().insertOrderPrtMsg(order_p, posCheckNo);
}
}
QLOG_INFO()<<QString("[<<<<---PrintMsgQueueDB::insertOrderPrtMsg orderId:%1 chk_num:%2 ret:%3--->>>>]")
.arg(orderId).arg(posCheckNo).arg(insertPrtMsgRet?1:0);
QLOG_INFO()<<QString("[<<<<---PrintMsgQueueDB::insertOrderPrtMsg orderId:%1 chk_num:%2 ret:%3--->>>>]").arg(orderId).arg(posCheckNo).arg(insertPrtMsgRet?1:0);
}
//入机成功更新插件上POS小票号显示;
......@@ -2782,6 +2800,8 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
QString omsPushOrderId = content[JSON_ORDER_ID].toString();
QString omsPushOrderChannel = content[JSON_CHANNEL].toString();
QString omsCallBackUrl= content[JSON_CALL_BACK_URL].toString(); // https://delposserviceapi.starbucks.net/backstage : 域名/backstage
bool omsSkipPrint = false;
content[JSON_SKIP_PRINT].toBool() ? omsSkipPrint = true : 0; // skipPrint
int omsPushOrderStatus = content[JSON_STATUS].toInt();
if ( omsCallBackUrl.length() ) {
......@@ -2807,6 +2827,7 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
delayOrderPull_p->orderId=omsPushOrderId;
delayOrderPull_p->channel=omsPushOrderChannel;
delayOrderPull_p->callBackUrl = omsCallBackUrl;
delayOrderPull_p->skipPrint = omsSkipPrint;
m_delayGetRefundDetailList.append(delayOrderPull_p);
QLOG_INFO()<<QString("[<<<<---_ResponseOMS11Request: orderId: %1 Append Success, m_delayGetRefundDetailList size: %2 And FirstOne: %3 --->>>>>]")
.arg( omsPushOrderId ).arg( m_delayGetRefundDetailList.size() ).arg( m_delayGetRefundDetailList.isEmpty()? " " : m_delayGetRefundDetailList.first()->orderId );
......@@ -2815,7 +2836,7 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
} else {
// 接受到非码oms插过来的订单,进行向队列中进行添加;
// Case3: 添加前 筛选是否已经存在待拉取的状态;
result = _TryAddOrderPull( omsPushOrderId, omsPushOrderChannel, omsCallBackUrl );
result = _TryAddOrderPull( omsPushOrderId, omsPushOrderChannel, omsCallBackUrl, omsSkipPrint );
}
}
......@@ -2916,6 +2937,51 @@ bool FlowControl::_ResponseOMS13Request(const QJsonObject &content, QJsonObject
}
bool FlowControl::_ResponseOMS14Request(const QJsonObject& content, QJsonObject& data, QString& error)
{
QLOG_INFO()<<__FUNCTION__;
//判断当前POS插件是否登录成功: 如果没有登录成功,尝试在次登录;
QLOG_INFO()<<"FlowControl::_ResponseOMS14Request:"<<content;
//无需检查插件是否登录成功, 直接从数据库读取数据;
bool result = true;
if ( content[JSON_ORDER_ID].toString().isEmpty() ) {
error =QString::fromLocal8Bit("订单号不能为空");
return false;
} else {
QString omsPushOrderId = content[JSON_ORDER_ID].toString();
QString omsPushOrderChannel = content[JSON_CHANNEL].toString();
int omsPushOrderStatus = content[JSON_STATUS].toInt();
/***组装延迟拉单请求对象参数***/
QueryOrderInputPosRecord* qOrderInPosRecord_p = new QueryOrderInputPosRecord();
if ( !qOrderInPosRecord_p ) {
QLOG_ERROR() << QString("[<<<<---_ResponseOMS14Request:orderId: %1 New QueryOrderInputPosRecord Failed --->>>>]").arg( omsPushOrderId );
error =QString::fromLocal8Bit("准备查询订单: %1 入机情况失败, New QueryOrderInputPosRecord 失败, 请重新推送").arg( omsPushOrderId );
return false;
} else {
qOrderInPosRecord_p->orderId = omsPushOrderId;
qOrderInPosRecord_p->channel = omsPushOrderChannel;
qOrderInPosRecord_p->status = omsPushOrderStatus;
// 查询订单入机记录;
result = SaveNoticeMsgDB::getInstance().insertNoticeMsg( noticeObjPtr, data );
}
}
if ( result ) {
error = QString("success");
} else {
error = QString("failed");
}
return result;
}
bool FlowControl::_ResponseHM21Request(const QJsonObject &content, QJsonObject &data, QString &error)
{
QLOG_INFO()<<__FUNCTION__;
......@@ -3872,9 +3938,11 @@ void FlowControl::onGetOrderDetails(const QString& orderId)
void FlowControl::onGetEcMopOrderDetails(const QString& orderId, const QString& channel)
{
// 入参非法;
if ( orderId.isEmpty() || channel.isEmpty() || orderId.length() < 17 || orderId.length() > 25 ) {
QLOG_INFO() << QString("[<<<<---FlowControl::onGetEcMopOrderDetails: OrderId:%1 / channel:%2 Is Empty / Error --->>>>]").arg( orderId ).arg( channel );
// 入参非法校验;
QString tempOrderId = orderId.trimmed(); // 返回一个字符串,移除从一开始到结尾的空白。也去掉头尾的空白【simplified】
if ( tempOrderId.isEmpty() || channel.isEmpty() || tempOrderId.length() < 17 || tempOrderId.length() > 25 ) {
QLOG_INFO() << QString("[<<<<---FlowControl::onGetEcMopOrderDetails: OrderId:%1 / channel:%2 Is Empty / Error --->>>>]").arg( tempOrderId ).arg( channel );
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("扫描订单号异常") );
return;
} else {
......@@ -3886,14 +3954,16 @@ void FlowControl::onGetEcMopOrderDetails(const QString& orderId, const QString&
return;
}
// 组装请求报文 [ 含门店编号:便于 OMS 校验此订单是否属于本门店 ] , 获取订单详情数据 ;[ 失败则弹框提示]
if ( m_FmOrdersMap.value(orderId) ) {
callBackUrl = m_FmOrdersMap.value(orderId)->callBackUrl;
if ( m_FmOrdersMap.value( tempOrderId ) ) {
callBackUrl = m_FmOrdersMap.value( tempOrderId )->callBackUrl;
}
// 初步上线, 兼容现有环境, EC-MOP 如果拉取失败, 需要 跳过错误展示
bool pullOrderDetailRet = _PullOrderDetail( orderId, channel , callBackUrl, true );
bool pullOrderDetailRet = _PullOrderDetail( tempOrderId, channel, callBackUrl, false, true );
if ( !pullOrderDetailRet ) {
if ( ConfigManger::GetInstance().GetOrderServerUrl().contains(".stg") ) {
callBackUrl = GET_O2OFULFILLMENT_STG_CBL ;
} else if ( ConfigManger::GetInstance().GetOrderServerUrl().contains(".dev") ) {
......@@ -3903,13 +3973,14 @@ void FlowControl::onGetEcMopOrderDetails(const QString& orderId, const QString&
} else {
callBackUrl = GET_O2OFULFILLMENT_PRO_CBL ;
}
pullOrderDetailRet = _PullOrderDetail( orderId, channel , callBackUrl );
pullOrderDetailRet = _PullOrderDetail( tempOrderId, channel , callBackUrl );
}
if ( pullOrderDetailRet ) {
// 展示跳转订单详情页面; // 同一线程, 理论无需 Sleep
Sleep(1000*3);
emit showOrderDetails( m_FmOrdersMap.value(orderId) );
emit showOrderDetails( m_FmOrdersMap.value( tempOrderId ) );
}
}
......
......@@ -70,14 +70,29 @@ private:
QString orderId;
int pullErrorCount;
QString callBackUrl;
}PullOrderInfo;
bool skipPrint;
} PullOrderInfo;
typedef struct TO_DELAY_PULL_ORDER
{
QString channel;
QString orderId;
QString callBackUrl;
}DelayPullOrderInfo;
bool skipPrint;
} DelayPullOrderInfo;
typedef struct QUERY_ORDER_INPUT_POS_RECORD
{
QString channel;
QString orderId;
int status;
} QueryOrderInputPosRecord;
typedef struct ORDER_OPERATION
{
......@@ -85,7 +100,8 @@ private:
int result;//1:成功,0:失败
QString orderId;
}OrderOperation;
} OrderOperation;
//存放向OMS汇报的结构体: 订单入机POS的情况;
typedef struct REPORTOMS_ORDERRECORD
......@@ -102,12 +118,13 @@ private:
QString failCode; // 入机/存储 错误码 (成功时都给 "");
QString posPluginVersion; //该订单入机后, 汇报给OMS对应程序的版本号;
int reqResult; //向OMS请求汇报结果;
}RepOMSRecordOrderInfo;
} RepOMSRecordOrderInfo;
//定义门店的营业状态;
typedef enum {
UNKNOWN=0,OPEN=1,CLOSE=2 /*0:未知;1:开店;2:关店*/
}StoreStatus;
} StoreStatus;
private:
// 门店信息
......@@ -361,7 +378,7 @@ private slots:
* 参数:[1]订单编号
* 返回:是否成功
* */
bool _PullOrderDetail( const QString &orderId, const QString &channel, const QString &callBackUrl, const bool &skipErrorDisplay = false );
bool _PullOrderDetail( const QString& orderId, const QString& channel, const QString& callBackUrl, const bool& skipPrint = false, const bool& skipErrorDisplay = false );
/* 功能:拉取订单
* 参数:NULL
* 返回:是否成功
......@@ -420,9 +437,9 @@ private slots:
QString _Penny2Dollar(int penny);
void _GetIpAddress();
void _AddOrderPull ( const QString& orderId=0, const QString& channel=0, const QString& callBackUrl="", const int& pageNumber=1, const int& pageSize=30 );
void _AddOrderPull ( const QString& orderId=0, const QString& channel=0, const QString& callBackUrl="", const bool& skipPrint=false, const int& pageNumber=1, const int& pageSize=30 );
// 避免获取较多历史订单的同时,OMS又有推单过来,导致死锁;
bool _TryAddOrderPull(const QString &orderId=0, const QString &channel=0, const QString &callBackUrl="", const int &pageNumber=1, const int &pageSize=30);
bool _TryAddOrderPull ( const QString& orderId=0, const QString& channel=0, const QString& callBackUrl="", const bool& skipPrint=false, const int& pageNumber=1, const int& pageSize=30);
//点击屏幕指定区域
void _ClickOMSAssignArea();
......@@ -649,6 +666,14 @@ public slots:
bool _ResponseOMS13Request(const QJsonObject &content, QJsonObject &data, QString &error);
/**
*功能:FM外卖插件为响应OMS推送 查询订单入机情况 请求[action:14 -> OMS->PosPlugin ]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否查询成功;
**/
bool _ResponseOMS14Request(const QJsonObject& content, QJsonObject& data, QString& error);
/**
*功能:FM外卖插件为响应盒马生鲜 推订单请求[action:21]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
......
......@@ -8,16 +8,16 @@ SimProcOrderDB::SimProcOrderDB()
QLOG_INFO()<<"[<<<<---SimProcOrderDB:: Structure Order Push and Refund DataBase--->>>>]";
}
bool SimProcOrderDB::initSimProcOrderDB(){
//QMutexLocker mutex(&m_mutex);
bool SimProcOrderDB::initSimProcOrderDB() {
bool retTryLock = m_mutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
if(!retTryLock){
if ( !retTryLock ) {
QLOG_ERROR()<<"[<<<<---SimProcOrderDB::initSimProcOrderDB Try Lock Failed--->>>>]";
return false;
}
bool bRet = false;
m_sqlDb=QSqlDatabase::addDatabase("QODBC","SimProcOrderDB"); //数据库驱动类型为SQL server;
if(m_sqlDb.isValid()){
if ( m_sqlDb.isValid() ) {
QLOG_INFO()<<"[<<<<---SimProcOrderDB::SqlServer ODBC driver is valid--->>>>]";
QString dsn="DRIVER={SQL SERVER};SERVER=127.0.0.1\\sqlexpress;DATABASE=MMXBenefits";
// Win10不支持属性: ;Trusted_Connection=yes ; 必须取消此属性,否则 QODBC3: Unable to connnet;
......@@ -26,36 +26,40 @@ bool SimProcOrderDB::initSimProcOrderDB(){
m_sqlDb.setPassword("SIM29@123");
if(!m_sqlDb.open()) { //打开数据库
QLOG_ERROR()<<"[<<<<---SimProcOrderDB::SqlServer Open Database error:--->>>>]"<<m_sqlDb.lastError().text();
bRet = false;
} else {
QLOG_INFO()<<"[<<<<---SimProcOrderDB::SqlServer Test Open database success!:--->>>>]";
QLOG_INFO()<<"[<<<<--- SimProcOrderDB::SqlServer Test Open Database Success --->>>>]";
QSqlQuery query(m_sqlDb);
QString selectsql ="select * from sys.tables where name='SimProcOrderTable'" ;
if(!query.exec(selectsql)) {
QLOG_ERROR()<<"[<<<<---SimProcOrderDB::SqlServer Database check table SimProcOrderTable command failed--->>>>]"<<query.lastError().text();
}
if(query.next()) {
} else {
if ( query.next() ) {
QLOG_INFO() << "[<<<<---SimProcOrderDB::Table SimProcOrderTable Has Exist--->>>>]";
bRet = true;
} else {
QLOG_INFO() << "[<<<<---SimProcOrderDB::Table SimProcOrderTable Does Not Exist--->>>>]";
//在此征用:isReport 字段为 预约实物 销售入机标志;在此征用:isBackReport 字段为 预约实物 退货入机标志;
query.prepare(QString("create table SimProcOrderTable ( orderId varchar(50) primary key,isPushed int,isRefund int,isReport int,isBackReport int,posCheckNo varchar(20),creatTime varchar(20) )"));
if(!query.exec()){
query.prepare( QString("create table SimProcOrderTable (orderId varchar(50) primary key, isPushed int, isRefund int, "
" isReport int, isBackReport int, posCheckNo varchar(20), creatTime varchar(20), "
" type varchar(4), status varchar(4), storeId varchar(20), channel varchar(20), opUser varchar(50), "
" recordDate datetime, remark varchar(100), failCode varchar(10), ipAddress varchar(16), decouplePosNo varchar(10),"
" posHostName varchar(50), posMacAddress varchar(30), posVersion varchar(15), deviceVersion varchar(20) )" ) );
if ( !query.exec() ) {
QLOG_ERROR()<< "[<<<<---Create Table SimProcOrderTable Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
bRet = false;
} else {
bRet = true;
}
}
}
m_sqlDb.close();
bRet = true;
}
} else {
QLOG_ERROR()<<"[<<<<---SimProcOrderDB::SqlServer ODBC driver no valid";
bRet = false;
}
if(bRet) {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---SimProcOrderDB::FM TakeOut Plugin Version:2.20193**.1 Begin Alter Column orderId--->>>>]");
bRet = alterTableSimProcOrderDB();
if ( bRet ) {
bRet = alterTableSimProcOrderDB() && alterTableSimProcOrderDB_2022() ;
QLOG_INFO()<<QString("[<<<<--- SimProcOrderDB:: FmPosPlugin Version:2.2022.7.25 Begin Alter Column New Cloumn --->>>>]");
m_mutex.unlock();
return bRet;
} else {
......@@ -64,7 +68,8 @@ bool SimProcOrderDB::initSimProcOrderDB(){
}
}
bool SimProcOrderDB::alterTableSimProcOrderDB(){
bool SimProcOrderDB::alterTableSimProcOrderDB() {
//QMutexLocker mutex(&m_mutex); 被 initSimProcOrderDB 调用 顾不用加锁,否则死锁;
int alterSuccessNum = 0;
QString PrimaryKeyName = "";
......@@ -126,8 +131,160 @@ bool SimProcOrderDB::alterTableSimProcOrderDB(){
QLOG_ERROR()<<"[<<<<---SimProcOrderDB::alterTableSimProcOrderDB::alterSuccessNum < 4 = --->>>>]"<<alterSuccessNum;
return false;
}
}
bool SimProcOrderDB::alterTableSimProcOrderDB_2022() {
//QMutexLocker mutex(&m_mutex); 被 initSimProcOrderDB 调用 顾不用加锁,否则死锁;
int addSuccessNum = 0;
QSqlQuery query(m_sqlDb);
QString selectsql;
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---SimProcOrderDB::alterTableSimProcOrderDB_2022 ::SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return false;
}
//1、Alter Table type;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='type'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add type varchar(4) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable type Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//2、Alter Table status;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='status'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add status varchar(4) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable status Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//3、Alter Table storeId;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='storeId'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add storeId varchar(20) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_msr_customer_info storeId Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//4、Alter Table channel;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='channel'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add channel varchar(20) null";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable channel Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//5、Alter Table opUser;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='opUser'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add opUser varchar(50) null";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable opUser Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//6、Alter Table recordDate;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='recordDate'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add recordDate datetime null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable reserve3 Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//7、Alter Table remark;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='remark'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add remark varchar(100) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable remark Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//8、Alter Table failCode;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='failCode'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add failCode varchar(10) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable failCode Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//9、Alter Table ipAddress;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='ipAddress'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add ipAddress varchar(16) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable ipAddress Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//10、Alter Table decouplePosNo;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='decouplePosNo'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add decouplePosNo varchar(10) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable decouplePosNo Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//11、Alter Table posHostName;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='posHostName'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add posHostName varchar(50) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable posHostName Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//12、Alter Table posMacAddress;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='posMacAddress'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add posMacAddress varchar(30) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable posMacAddress Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//13、Alter Table posVersion;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='posVersion'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add posVersion varchar(15) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable posVersion Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
//14、Alter Table deviceVersion;
selectsql = "select * from syscolumns where id=object_id('SimProcOrderTable') and name='deviceVersion'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table SimProcOrderTable add deviceVersion varchar(10) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table SimProcOrderTable deviceVersion Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
m_sqlDb.close();
if (14 == addSuccessNum) {
QLOG_INFO()<<"[<<<<---SimProcOrderDB::alterTableSimProcOrderDB_2022:: addSuccessNum = 14 --->>>>]";
return true;
} else {
QLOG_ERROR()<<"[<<<<---SimProcOrderDB::alterTableSimProcOrderDB_2022:: addSuccessNum < 14 = --->>>>]"<<addSuccessNum;
return false;
}
}
SimProcOrderDB &SimProcOrderDB::getInstance()
{
static SimProcOrderDB simProcOrderDB;
......
......@@ -30,6 +30,15 @@ public:
**/
bool alterTableSimProcOrderDB();
/**
*功能:修改 SimProcOrderDB表字段: 新增多个入机状态字段;
*参数:[无]
*返回:true:修改成功,false:修改失败
**/
bool alterTableSimProcOrderDB_2022();
/**
*功能:插入一条Simphony返回小票号的订单新数据
*参数:[1]订单号 [2]创建时间
......
......@@ -110,6 +110,7 @@ class OrderObject : public QObject
Q_PROPERTY (QString carNumber READ getCarNumber WRITE setCarNumber)
Q_PROPERTY (QString privacyPhone READ getPrivacyPhone WRITE setPrivacyPhone)
Q_PROPERTY (QString callBackUrl READ getCallBackUrl WRITE setCallBackUrl)
Q_PROPERTY (bool skipPrint READ getSkipPrint WRITE setSkipPrint)
public:
OrderObject(QObject *parent=0)
......@@ -236,7 +237,8 @@ public:
QString remindTicketTime; // 提醒小票时间
QString carNumber; // 车牌号
QString privacyPhone; // 隐私号
QString callBackUrl; // 为阿里云配置新域名, 用于获取订单详情, 和汇报订单入机情况: 拉取订单详情成功时手动添加到订单json报文体中为了入机汇报接口;
QString callBackUrl; // 为 Fulfillment Service 后多个OMS, 用于获取订单详情, 和汇报订单入机情况: 拉取订单详情成功时手动添加到订单json报文体中为了入机汇报接口;
bool skipPrint; // 上游推送的订单 是否跳过打印;
int forwardPosStatus; // 正向单入机状态: 0:未知 1: 成功 2:失败;
int negativePosStatus; // 负向单同上;
......@@ -542,6 +544,8 @@ public:
inline QString getCallBackUrl()const{return callBackUrl;}
inline void setCallBackUrl(const QString& v){callBackUrl = v;}
inline bool getSkipPrint()const{return skipPrint;}
inline void setSkipPrint(const bool& v){skipPrint = v;}
};
#endif // ORDEROBJECT_H
......@@ -163,6 +163,7 @@
#define JSON_POSIPADDRESS "posAddress"
#define JSON_CHANNEL "channel"
#define JSON_CALL_BACK_URL "callBackUrl"
#define JSON_SKIP_PRINT "skipPrint"
#define JSON_BUSINESSSTATUS "business_status"
#define JSON_CODE "code"
#define JSON_PAGENUMBER "pageNo"
......
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