Commit 6dcbb47a by wuyang.zou

fix bug: 更新POS本地数据 收货信息部分数据 + Local Http Server 转移到线程中

parent d6a24b7d
...@@ -54,17 +54,29 @@ FlowControl::FlowControl() ...@@ -54,17 +54,29 @@ FlowControl::FlowControl()
connect(this, &FlowControl::doLogin, this, &FlowControl::onGetNewStoreInfo,Qt::BlockingQueuedConnection); connect(this, &FlowControl::doLogin, this, &FlowControl::onGetNewStoreInfo,Qt::BlockingQueuedConnection);
/***打开Sqlite数据库并登陆外卖插件***/
SimProcOrderDB::getInstance();
/***打开SqlServer POS打印汇总信息本地数据库***/
PrintSumBillPosDB::getInstance();
if( !PrintSumBillPosDB::getInstance().initPrintSumBillPosDB() ){
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("尝试打开POS本地数据库失败"));
}
/*** 启动Http服务:用来响应Simphony_Script获取订单的请求***/ /*** 启动Http服务:用来响应Simphony_Script获取订单的请求***/
loaclHttpServer = new LoaclHttpServer();
loaclHttpServer->run();
/*
m_tcpServerManage = new JQHttpServer::TcpServerManage(10); m_tcpServerManage = new JQHttpServer::TcpServerManage(10);
QLOG_INFO()<< "[<<<<---FlowControl::Receive Simphony_Script Request:m_tcpServerManage:--->>>>]" << m_tcpServerManage;
m_tcpServerManage->setHttpAcceptedCallback( [this]( const QPointer< JQHttpServer::Session > &session ) m_tcpServerManage->setHttpAcceptedCallback( [this]( const QPointer< JQHttpServer::Session > &session )
{ {
qDebug() << "reply" << QThread::currentThreadId(); QLOG_INFO()<< "[<<<<---FlowControl::Receive Simphony_Script Request:currentThreadId:--->>>>]" << QThread::currentThreadId();
// 回调发生在新的线程内,不是主线程。 // 回调发生在新的线程内,不是主线程。
/***解析FM外卖插件HTTP服务与Simphony_Script请求的会话连接是否断开: 会话连接未断开***/ //解析FM外卖插件HTTP服务与Simphony_Script请求的会话连接是否断开: 会话连接未断开
if(!session.isNull()) if(!session.isNull())
{ {
QString recvData = QString::fromUtf8(session->requestRawData()); QString recvData = QString::fromUtf8(session->requestRawData());
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---Receive Simphony_Script Request: %1--->>>>]").arg(recvData); QLOG_INFO() << QString::fromLocal8Bit("[<<<<---Receive Simphony_Script Request recvData: %1--->>>>]").arg(recvData);
QJsonParseError jsonError; QJsonParseError jsonError;
QJsonObject recvObject; QJsonObject recvObject;
QJsonObject replyObject; QJsonObject replyObject;
...@@ -73,42 +85,41 @@ FlowControl::FlowControl() ...@@ -73,42 +85,41 @@ FlowControl::FlowControl()
QJsonObject data; //回复的内容json QJsonObject data; //回复的内容json
int iscontinue =0; int iscontinue =0;
recvObject = QJsonDocument::fromJson(recvData.toUtf8(), &jsonError).object(); recvObject = QJsonDocument::fromJson(recvData.toUtf8(), &jsonError).object();
/***解析Simphony_Script Request json格式: 解析失败***/ //解析Simphony_Script Request json格式: 解析失败
if(jsonError.error != QJsonParseError::NoError) if(jsonError.error != QJsonParseError::NoError)
{ {
status = 0; status = 0;
msg = jsonError.errorString(); msg = jsonError.errorString();
} }
/***解析Simphony_Script Request json格式: 解析成功***/ //解析Simphony_Script Request json格式: 解析成功
else { else {
/***解析:FM外卖插件为响应Simphony请求准备返回数据:准备返回数据成功***/ //解析:FM外卖插件为响应Simphony请求准备返回数据:准备返回数据成功
if(_ResponseSimphonyRequest(recvObject,data, msg)) if(_ResponseSimphonyRequest(recvObject,data, msg))
{ {
status = 100; status = 100;
} }
/***解析:FM外卖插件为响应Simphony请求准备返回数据:准备返回数据失败***/ //解析:FM外卖插件为响应Simphony请求准备返回数据:准备返回数据失败
else{ else{
status = 0; status = 0;
} }
/***解析:等待Simphony获取的有效订单列表是否为空: sim有效订单列表不为空***/ //解析:等待Simphony获取的有效订单列表是否为空: sim有效订单列表不为空
if(!m_simValidOrdersList.isEmpty()) if(!m_simValidOrdersList.isEmpty())
{ {
iscontinue=1; iscontinue=1;
} }
} }
/***将FM外卖插件中的合法有效数据返回给上面Simphony_Script发过来的请求***/ //将FM外卖插件中的合法有效数据返回给上面Simphony_Script发过来的请求
replyObject = _PackHttpReplyJson(status, msg, data,iscontinue); replyObject = _PackHttpReplyJson(status, msg, data,iscontinue);
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件回应Simphony_Script拉单请求后的返回结果:--->>>>]") << replyObject; QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件回应Simphony_Script拉单请求后的返回结果:--->>>>]") << replyObject;
/***??????????????????***/
session->replyJsonObject(replyObject); session->replyJsonObject(replyObject);
} }
/***解析FM外卖插件HTTP服务与Simphony_Script请求的会话连接是否断开: 会话连接断开***/ //解析FM外卖插件HTTP服务与Simphony_Script请求的会话连接是否断开: 会话连接断开
else{ else{
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务与Simphony_Script请求会话断开连接:--->>>>]"); QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务与Simphony_Script请求会话断开连接:--->>>>]");
} }
} ); } );
/***FM外卖插件绑定启动HTTP服务的端口***/ //FM外卖插件绑定启动HTTP服务的端口
int port = ConfigManger::GetInstance().GetHttpServerPort(); int port = ConfigManger::GetInstance().GetHttpServerPort();
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务监听端口:%1 :--->>>>]").arg(port); QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务监听端口:%1 :--->>>>]").arg(port);
if(m_tcpServerManage->listen( QHostAddress::Any, port)) if(m_tcpServerManage->listen( QHostAddress::Any, port))
...@@ -117,14 +128,9 @@ FlowControl::FlowControl() ...@@ -117,14 +128,9 @@ FlowControl::FlowControl()
}else{ }else{
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务 绑定端口失败:--->>>>]"); QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务 绑定端口失败:--->>>>]");
} }
*/
/***打开Sqlite数据库并登陆外卖插件***/
SimProcOrderDB::getInstance();
/***打开SqlServer POS打印汇总信息本地数据库***/
PrintSumBillPosDB::getInstance();
if( !PrintSumBillPosDB::getInstance().initPrintSumBillPosDB() ){
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("尝试打开POS本地数据库失败"));
}
_ClickOMSAssignArea(); _ClickOMSAssignArea();
m_loginTimer->start(20*1000); m_loginTimer->start(20*1000);
} }
...@@ -180,6 +186,7 @@ void FlowControl::_ClickOMSAssignArea() ...@@ -180,6 +186,7 @@ void FlowControl::_ClickOMSAssignArea()
void FlowControl::_ClickToLogin() void FlowControl::_ClickToLogin()
{ {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---触发按钮点击事件:_ClickToLogin: m_bLoginResult:%1 m_simValidOrdersList.isEmpty():%2--->>>>>]").arg(m_bLoginResult).arg(m_simValidOrdersList.isEmpty());
if(!m_bLoginResult||!m_simValidOrdersList.isEmpty()) if(!m_bLoginResult||!m_simValidOrdersList.isEmpty())
{ {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---触发按钮点击事件:FM外卖插件20s后再次尝试登陆--->>>>]"); QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---触发按钮点击事件:FM外卖插件20s后再次尝试登陆--->>>>]");
...@@ -210,6 +217,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -210,6 +217,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
emit startRemind(0); emit startRemind(0);
} }
} }
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis-> changeOrderStatus--->>>>]");
emit changeOrderStatus(orderObject); emit changeOrderStatus(orderObject);
} }
/***<2>:FM插件维护的有效订单容器中存在此订单:更新订单容器中此订单的订单状态***/ /***<2>:FM插件维护的有效订单容器中存在此订单:更新订单容器中此订单的订单状态***/
...@@ -230,20 +238,25 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -230,20 +238,25 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
{ {
emit startRemind(1); emit startRemind(1);
} }
if(SimProcOrderDB::getInstance().isPushedOrder(orderObject->id)) if(SimProcOrderDB::getInstance().isPushedOrder(orderObject->id))
{ {
orderObject->isPush = true; orderObject->isPush = true;
} }
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis-> orderObject->isPush--->>>>]")<< orderObject->isPush;
if(SimProcOrderDB::getInstance().isRefundOrder(orderObject->id)) if(SimProcOrderDB::getInstance().isRefundOrder(orderObject->id))
{ {
orderObject->isCancle = true; orderObject->isCancle = true;
} }
QString posOrderCheckNo=m_orderIdToPosCheckNoMap.value(orderObject->id); QString posOrderCheckNo=m_orderIdToPosCheckNoMap.value(orderObject->id);
if(posOrderCheckNo.isEmpty()) if(posOrderCheckNo.isEmpty())
{ {
SimProcOrderDB::getInstance().getPosOrderCheckNo(orderObject->id,posOrderCheckNo); SimProcOrderDB::getInstance().getPosOrderCheckNo(orderObject->id,posOrderCheckNo);
} }
orderObject->posCheckNo=posOrderCheckNo; orderObject->posCheckNo=posOrderCheckNo;
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis-> orderObject->posCheckNo:--->>>>]")<<orderObject->posCheckNo;
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis-> orderObject->orderStatus:--->>>>]")<<orderObject->orderStatus;
switch (orderObject->orderStatus){ switch (orderObject->orderStatus){
case OrderObject::NewOrder: case OrderObject::NewOrder:
case OrderObject::Confirmed: case OrderObject::Confirmed:
...@@ -262,6 +275,9 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject) ...@@ -262,6 +275,9 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
m_simValidOrdersList.append(orderObject->id); m_simValidOrdersList.append(orderObject->id);
} }
m_OrderEntryMutex.unlock(); m_OrderEntryMutex.unlock();
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis->m_simValidOrdersList.num:%1 --->>>>]")<< m_simValidOrdersList.count();
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis->m_simValidOrdersList:%1 --->>>>]")<< m_simValidOrdersList;
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis->_ClickOMSAssignArea --->>>>]");
_ClickOMSAssignArea(); _ClickOMSAssignArea();
} }
break; break;
...@@ -333,6 +349,11 @@ QString FlowControl::_GetCashierId() ...@@ -333,6 +349,11 @@ QString FlowControl::_GetCashierId()
return m_cashierId; return m_cashierId;
} }
bool FlowControl::_SimValidOrdersListIsEmpty(){
return m_simValidOrdersList.empty();
}
bool FlowControl::_Login() bool FlowControl::_Login()
{ {
QString error; QString error;
...@@ -385,6 +406,7 @@ bool FlowControl::_Login() ...@@ -385,6 +406,7 @@ bool FlowControl::_Login()
QLOG_INFO() << QString("[<<<<---Login Retry--->>>>] %1 msec after login...").arg(VALUE_RELOGINTIME); QLOG_INFO() << QString("[<<<<---Login Retry--->>>>] %1 msec after login...").arg(VALUE_RELOGINTIME);
QTimer::singleShot(VALUE_RELOGINTIME, this, &FlowControl::_Login); QTimer::singleShot(VALUE_RELOGINTIME, this, &FlowControl::_Login);
} }
QLOG_INFO() << QString("[<<<<---Login--->>>>][m_bLoginResult:%1]")<<m_bLoginResult;
return result; return result;
} }
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "Network/billSocket.h" #include "Network/billSocket.h"
#include "Model/orderObject.h" #include "Model/orderObject.h"
#include "Model/dishesObject.h" #include "Model/dishesObject.h"
#include "LocalServer/loaclHttpServer.h"
#include "alertForm.h" #include "alertForm.h"
#include <QMap> #include <QMap>
#include <JQHttpServer.h> #include <JQHttpServer.h>
...@@ -31,6 +32,14 @@ public: ...@@ -31,6 +32,14 @@ public:
* */ * */
QString _GetCashierId(); QString _GetCashierId();
/* 功能:判断SIM有效订单队列list 是否为空;
* 参数:NULL
* 返回:SIM有效订单队列是否为空;
* */
bool _SimValidOrdersListIsEmpty();
//QStringList& _GetSimValidOrdersList();
private: private:
FlowControl(); FlowControl();
FlowControl(FlowControl const&); FlowControl(FlowControl const&);
...@@ -79,7 +88,8 @@ private: ...@@ -79,7 +88,8 @@ private:
bool m_bLoginResult; bool m_bLoginResult;
bool m_bOperateResult; bool m_bOperateResult;
// HttpServer // HttpServer
JQHttpServer::TcpServerManage* m_tcpServerManage; //JQHttpServer::TcpServerManage* m_tcpServerManage;
LoaclHttpServer* loaclHttpServer;
QMap<QString, QMultiMap<QString, dishesObject> >m_dishesMap; QMap<QString, QMultiMap<QString, dishesObject> >m_dishesMap;
//等待Simphony拉取的有效订单队列list[orderId] //等待Simphony拉取的有效订单队列list[orderId]
...@@ -247,7 +257,7 @@ private slots: ...@@ -247,7 +257,7 @@ private slots:
* 参数:NULL * 参数:NULL
* 返回:Json对象 * 返回:Json对象
* */ * */
QJsonObject _PackHttpReplyJson(const int status, const QString& msg, const QJsonObject& data, const int &iscontinue); //QJsonObject _PackHttpReplyJson(const int status, const QString& msg, const QJsonObject& data, const int &iscontinue);
/** /**
*功能:定时清空订单Map里两天前的订单 *功能:定时清空订单Map里两天前的订单
*参数:无 *参数:无
...@@ -260,70 +270,70 @@ private slots: ...@@ -260,70 +270,70 @@ private slots:
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息; *参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功; *返回:是否准备成功;
**/ **/
bool _ResponseSimphonyRequest(const QJsonObject &content, QJsonObject &data,QString &error); //bool _ResponseSimphonyRequest(const QJsonObject &content, QJsonObject &data,QString &error);
/** /**
*功能:FM外卖插件为响应Simphony请求[action:01 -> 拉取订单]准备返回数据 *功能:FM外卖插件为响应Simphony请求[action:01 -> 拉取订单]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息; *参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功; *返回:是否准备成功;
**/ **/
bool _ResponseSimphony01Request(const QJsonObject &content, QJsonObject &data,QString &error); //bool _ResponseSimphony01Request(const QJsonObject &content, QJsonObject &data,QString &error);
/** /**
*功能:FM外卖插件为响应Simphony请求[action:02 -> 确认订单]准备返回数据 *功能:FM外卖插件为响应Simphony请求[action:02 -> 确认订单]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息; *参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功; *返回:是否准备成功;
**/ **/
bool _ResponseSimphony02Request(const QJsonObject &content, QJsonObject &data,QString &error); //bool _ResponseSimphony02Request(const QJsonObject &content, QJsonObject &data,QString &error);
/** /**
*功能:FM外卖插件为响应Simphony请求[action:03 -> 取消订单]准备返回数据 *功能:FM外卖插件为响应Simphony请求[action:03 -> 取消订单]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息; *参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功; *返回:是否准备成功;
**/ **/
bool _ResponseSimphony03Request(const QJsonObject &content, QJsonObject &data,QString &error); //bool _ResponseSimphony03Request(const QJsonObject &content, QJsonObject &data,QString &error);
/** /**
*功能:FM外卖插件为响应Simphony请求[action:04 -> 汇报订单Sim/POS产生的小票号]准备返回数据 *功能:FM外卖插件为响应Simphony请求[action:04 -> 汇报订单Sim/POS产生的小票号]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息; *参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功; *返回:是否准备成功;
**/ **/
bool _ResponseSimphony04Request(const QJsonObject &content, QJsonObject &data,QString &error); //bool _ResponseSimphony04Request(const QJsonObject &content, QJsonObject &data,QString &error);
/** /**
*功能:FM外卖插件为响应Simphony请求[action:05 -> simphony更新订单数据到POS本地数据库以以便POS打印小票及汇总单信息]准备返回数据 *功能:FM外卖插件为响应Simphony请求[action:05 -> simphony更新订单数据到POS本地数据库以以便POS打印小票及汇总单信息]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息; *参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功; *返回:是否准备成功;
**/ **/
bool _ResponseSimphony05Request(const QJsonObject &content, QJsonObject &data,QString &error); //bool _ResponseSimphony05Request(const QJsonObject &content, QJsonObject &data,QString &error);
/** /**
*功能:FM外卖插件为响应Simphony请求[action:11 -> Sim/POS推送订单到FM插件]准备返回数据 *功能:FM外卖插件为响应Simphony请求[action:11 -> Sim/POS推送订单到FM插件]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息; *参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功; *返回:是否准备成功;
**/ **/
bool _ResponseSimphony11Request(const QJsonObject &content, QJsonObject &data,QString &error); //bool _ResponseSimphony11Request(const QJsonObject &content, QJsonObject &data,QString &error);
/** /**
*功能:FM外卖插件为响应Simphony请求[action:12 -> Sim/POS推送门店营业状态]准备返回数据 *功能:FM外卖插件为响应Simphony请求[action:12 -> Sim/POS推送门店营业状态]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息; *参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功; *返回:是否准备成功;
**/ **/
bool _ResponseSimphony12Request(const QJsonObject &content, QJsonObject &data,QString &error); //bool _ResponseSimphony12Request(const QJsonObject &content, QJsonObject &data,QString &error);
/** /**
*功能:FM外卖插件响应Simphony请求时,如果外卖插件未登录则进行登陆; *功能:FM外卖插件响应Simphony请求时,如果外卖插件未登录则进行登陆;
*参数:1、请求json参数;2、返回错误信息; *参数:1、请求json参数;2、返回错误信息;
*返回:是否登陆成功; *返回:是否登陆成功;
**/ **/
bool _ResponseSimReqTryLogin(const QJsonObject &content, QString &error); //bool _ResponseSimReqTryLogin(const QJsonObject &content, QString &error);
/** /**
*功能:FM外卖插件为响应Simphony请求[查询FM插件第一条订单数据作为返回数据]准备返回数据 *功能:FM外卖插件为响应Simphony请求[查询FM插件第一条订单数据作为返回数据]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息; *参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功; *返回:是否准备成功;
**/ **/
bool _ResponseSimReqFristOrderData(QJsonObject &data,QString &error, const QString &orderId); //bool _ResponseSimReqFristOrderData(QJsonObject &data,QString &error, const QString &orderId);
// 单位转换 // 单位转换
QString _Penny2Dollar(int penny); QString _Penny2Dollar(int penny);
...@@ -395,6 +405,86 @@ public slots: ...@@ -395,6 +405,86 @@ public slots:
* */ * */
void onDailyReport(); void onDailyReport();
/* 功能:获取Http返回Json数据
* 参数:NULL
* 返回:Json对象
* */
QJsonObject _PackHttpReplyJson(const int status, const QString& msg, const QJsonObject& data, const int &iscontinue);
/**
*功能:FM外卖插件为响应Simphony请求准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphonyRequest(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:01 -> 拉取订单]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony01Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:02 -> 确认订单]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony02Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:03 -> 取消订单]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony03Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:04 -> 汇报订单Sim/POS产生的小票号]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony04Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:05 -> simphony更新订单数据到POS本地数据库以以便POS打印小票及汇总单信息]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony05Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:11 -> Sim/POS推送订单到FM插件]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony11Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[action:12 -> Sim/POS推送门店营业状态]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimphony12Request(const QJsonObject &content, QJsonObject &data,QString &error);
/**
*功能:FM外卖插件响应Simphony请求时,如果外卖插件未登录则进行登陆;
*参数:1、请求json参数;2、返回错误信息;
*返回:是否登陆成功;
**/
bool _ResponseSimReqTryLogin(const QJsonObject &content, QString &error);
/**
*功能:FM外卖插件为响应Simphony请求[查询FM插件第一条订单数据作为返回数据]准备返回数据
*参数:1、请求json参数;2、准备返回请求数据的Buff;3、返回错误信息;
*返回:是否准备成功;
**/
bool _ResponseSimReqFristOrderData(QJsonObject &data,QString &error, const QString &orderId);
}; };
#endif // FLOWCONTROL_H #endif // FLOWCONTROL_H
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "alertForm.h" #include "alertForm.h"
#include <QDateTime> #include <QDateTime>
#include "Control/flowControl.h" #include "Control/flowControl.h"
#include "preDefine.h"
PrintSumBillPosDB::PrintSumBillPosDB() PrintSumBillPosDB::PrintSumBillPosDB()
{ {
...@@ -57,28 +58,42 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj,const QString& ...@@ -57,28 +58,42 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj,const QString&
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
query.addBindValue(posCheckNo.toInt()); // --小票号 query.addBindValue(posCheckNo.toInt()); // --小票号
query.addBindValue(orderObj->lastName); // --顾客-姓 query.addBindValue(orderObj->lastName); // --顾客-姓
query.addBindValue(QString(orderObj->firstName)); // --顾客-名 query.addBindValue(orderObj->customerName); // --顾客-全名
query.addBindValue(orderObj->customerSex); // --顾客-性别 QString temp_customerSex;
if( !orderObj->customerSex.compare(QString::fromLocal8Bit(FM_MALE)) || !orderObj->customerSex.compare(QString("Male")) ){
temp_customerSex = "Male";
}else if( !orderObj->customerSex.compare(QString::fromLocal8Bit(FM_FEMALE)) || !orderObj->customerSex.compare(QString("Female")) ){
temp_customerSex = "Female";
}else{ temp_customerSex = ""; }
query.addBindValue(temp_customerSex); // --顾客-性别
query.addBindValue(0); // --顾客-生日 query.addBindValue(0); // --顾客-生日
QDateTime qdaTi = QDateTime::currentDateTimeUtc(); QDateTime qdaTi = QDateTime::currentDateTimeUtc();
query.addBindValue(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss")); // --POS出小票时间 query.addBindValue(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss")); // --POS出小票时间
query.addBindValue(FlowControl::GetInstance()._GetCashierId()); // --订单处理者 query.addBindValue(FlowControl::GetInstance()._GetCashierId()); // --订单处理者
query.addBindValue(""); // --变更订单时间 //?????????????????????????????????????????? query.addBindValue(""); // --变更订单时间 //??????????????????????????????????????????
query.addBindValue(""); // --变更订单作者 [*****后期更新*****] query.addBindValue(""); // --变更订单作者 [*****后期更新*****]
query.addBindValue(orderObj->consigneeName); // --收货者-人名
query.addBindValue(orderObj->customerName); // --收货者-名 //?????????????????????????????????????????? query.addBindValue(orderObj->addressDetail); // --收货者
query.addBindValue(orderObj->addressDetail); // --收货者-地址 //?????????????????????????????????????????? query.addBindValue(orderObj->consigneePhone); // --收货者-电话
query.addBindValue(orderObj->phone); // --收货者-电话 //??????????????????????????????????????????
query.addBindValue(orderObj->id); // --订单编号 query.addBindValue(orderObj->id); // --订单编号
query.addBindValue(orderObj->waybillId); // --物流编号 query.addBindValue(orderObj->waybillId); // --物流编号
query.addBindValue(0); // --取票号 // [*****后期更新*****] query.addBindValue(orderObj->pickupCode.length()==0?0:orderObj->pickupCode.toInt()); // --取餐号;
query.addBindValue(orderObj->riderPhone); // --配送者电话 query.addBindValue(orderObj->riderPhone); // --配送者电话
query.addBindValue(orderObj->riderName); // -配送者名称 query.addBindValue(orderObj->riderName); // -配送者名称
if(!query.exec()) if(!query.exec())
{ {
QLOG_ERROR()<<"[<<<<---SqlServer Database:customer_info Error--->>>>]"<<query.lastError().text()<<QString::number(query.lastError().type()); QLOG_ERROR()<<"[<<<<---SqlServer Database:customer_info Error--->>>>]"<<query.lastError().text()<<QString::number(query.lastError().type());
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) "
"VALUES(%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17)").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).arg(orderObj->pickupCode.length()==0?0:orderObj->pickupCode.toInt()).arg(orderObj->riderPhone).arg(orderObj->riderName);
result = false; result = false;
} }
else{ else{
......
#include "loaclHttpServer.h"
#include "Control/flowControl.h"
#include "DTools/configManger.h"
#include "QsLog.h"
#include <QString>
LoaclHttpServer::LoaclHttpServer()
{
QLOG_INFO()<< QString::fromLocal8Bit("[<<<<---LoaclHttpServer::启动本地 Https Server [QThread]--->>>>]");
m_tcpServerManage = new JQHttpServer::TcpServerManage(10);
}
void LoaclHttpServer::run()
{
/*** 启动Http服务:用来响应Simphony_Script获取订单的请求***/
QLOG_INFO()<< "[<<<<---LoaclHttpServer::Receive Simphony_Script Request:m_tcpServerManage:--->>>>]" << m_tcpServerManage;
m_tcpServerManage->setHttpAcceptedCallback( [this]( const QPointer< JQHttpServer::Session > &session )
{
QLOG_INFO()<< "[<<<<---LoaclHttpServer::Receive Simphony_Script Request:currentThreadId:--->>>>]" << QThread::currentThreadId();
// 回调发生在新的线程内;
/***解析FM外卖插件HTTP服务与Simphony_Script请求的会话连接是否断开: 会话连接未断开***/
if(!session.isNull())
{
QString recvData = QString::fromUtf8(session->requestRawData());
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---Receive Simphony_Script Request recvData: %1--->>>>]").arg(recvData);
QJsonParseError jsonError;
QJsonObject recvObject;
QJsonObject replyObject;
int status; //解析json结果
QString msg;
QJsonObject data; //回复的内容json
int iscontinue =0;
recvObject = QJsonDocument::fromJson(recvData.toUtf8(), &jsonError).object();
/***解析Simphony_Script Request json格式: 解析失败***/
if(jsonError.error != QJsonParseError::NoError)
{
status = 0;
msg = jsonError.errorString();
}
/***解析Simphony_Script Request json格式: 解析成功***/
else {
/***解析:FM外卖插件为响应Simphony请求准备返回数据:准备返回数据成功***/
if(FlowControl::GetInstance()._ResponseSimphonyRequest(recvObject,data, msg))
{
status = 100;
}
/***解析:FM外卖插件为响应Simphony请求准备返回数据:准备返回数据失败***/
else{
status = 0;
}
/***解析:等待Simphony获取的有效订单列表是否为空: sim有效订单列表不为空***/
if(!FlowControl::GetInstance()._SimValidOrdersListIsEmpty())
{
iscontinue=1;
}
}
/***将FM外卖插件中的合法有效数据返回给上面Simphony_Script发过来的请求***/
replyObject = FlowControl::GetInstance()._PackHttpReplyJson(status, msg, data,iscontinue);
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件回应Simphony_Script拉单请求后的返回结果:--->>>>]") << replyObject;
session->replyJsonObject(replyObject);
}
/***解析FM外卖插件HTTP服务与Simphony_Script请求的会话连接是否断开: 会话连接断开***/
else{
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务与Simphony_Script请求会话断开连接:--->>>>]");
}
} );
/***FM外卖插件绑定启动HTTP服务的端口***/
int port = ConfigManger::GetInstance().GetHttpServerPort();
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务监听端口:%1 :--->>>>]").arg(port);
if(m_tcpServerManage->listen( QHostAddress::Any, port))
{
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务 绑定端口成功:--->>>>]");
}else{
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件Http服务 绑定端口失败:--->>>>]");
}
}
void LoaclHttpServer::stop()
{
terminate();
wait();
}
#ifndef LOACLHTTPSERVER_H
#define LOACLHTTPSERVER_H
#include <QThread>
#include "Network/billSocket.h"
#include "Model/orderObject.h"
#include "Model/dishesObject.h"
#include "alertForm.h"
#include <QMap>
#include <JQHttpServer.h>
#include <QMutex>
#include <QDateTime>
#include <QJsonArray>
#include <QTimer>
#include <QPair>
#include <QMutex>
/*class:LoaclHttpServer 线程:接受客户端HTTP请求的服务*/
class LoaclHttpServer: public QThread
{
Q_OBJECT
public:
/* 功能: 接受客户端HTTP请求的服务的无参构造 [本地http服务]
* 参数:NULL
* 返回:NULL
* */
LoaclHttpServer();
private:
// HttpServer
JQHttpServer::TcpServerManage* m_tcpServerManage;
public:
/* 功能:本线程执行的具体代码功能;
* 参数:NULL
* 返回:NULL
* */
void run();
/* 功能:暂停本线程的清理任务;
* 参数:NULL
* 返回:NULL
* */
void stop();
};
#endif // LOACLHTTPSERVER_H
...@@ -14,6 +14,7 @@ class OrderObject : public QObject ...@@ -14,6 +14,7 @@ class OrderObject : public QObject
Q_PROPERTY (QString orgOrderId READ getOrgOrderId WRITE setOrgOrderId) Q_PROPERTY (QString orgOrderId READ getOrgOrderId WRITE setOrgOrderId)
Q_PROPERTY (QString waybillId READ getWaybillId WRITE setWaybillId) Q_PROPERTY (QString waybillId READ getWaybillId WRITE setWaybillId)
Q_PROPERTY (QString watercourseId READ getWatercourseId WRITE setWatercourseId) Q_PROPERTY (QString watercourseId READ getWatercourseId WRITE setWatercourseId)
Q_PROPERTY (QString pickupCode READ getPickupCode WRITE setPickupCode)
Q_PROPERTY (QString customerId READ getCustomerId WRITE setCustomerId) Q_PROPERTY (QString customerId READ getCustomerId WRITE setCustomerId)
Q_PROPERTY (QString customerName READ getCustomerName WRITE setCustomerName) Q_PROPERTY (QString customerName READ getCustomerName WRITE setCustomerName)
Q_PROPERTY (QString phone READ getPhone WRITE setPhone) Q_PROPERTY (QString phone READ getPhone WRITE setPhone)
...@@ -42,6 +43,8 @@ class OrderObject : public QObject ...@@ -42,6 +43,8 @@ class OrderObject : public QObject
Q_PROPERTY (QString longitude READ getLongitude WRITE setLongitude) Q_PROPERTY (QString longitude READ getLongitude WRITE setLongitude)
Q_PROPERTY (QString latitude READ getLatitude WRITE setLatitude) Q_PROPERTY (QString latitude READ getLatitude WRITE setLatitude)
Q_PROPERTY (QString street READ getStreet WRITE setStreet) Q_PROPERTY (QString street READ getStreet WRITE setStreet)
Q_PROPERTY (QString consigneeName READ getConsigneeName WRITE setConsigneeName)
Q_PROPERTY (QString consigneePhone READ getConsigneePhone WRITE setConsigneePhone)
Q_PROPERTY (QString addressDetail READ getAddressDetail WRITE setAddressDetail) Q_PROPERTY (QString addressDetail READ getAddressDetail WRITE setAddressDetail)
Q_PROPERTY (QString posCheckNo READ getPosCheckNo WRITE setPosCheckNo) Q_PROPERTY (QString posCheckNo READ getPosCheckNo WRITE setPosCheckNo)
Q_PROPERTY (int updateTime READ getUpdateTime WRITE setUpdateTime) Q_PROPERTY (int updateTime READ getUpdateTime WRITE setUpdateTime)
...@@ -83,7 +86,8 @@ public: ...@@ -83,7 +86,8 @@ public:
QString id; //编号 QString id; //编号
QString orgOrderId; //原始订单编号 QString orgOrderId; //原始订单编号
QString waybillId; //运单号 QString waybillId; //运单号
QString watercourseId; //流水号(取餐号) QString watercourseId; //流水号
QString pickupCode; //取餐号
QString customerId; //用户编号 QString customerId; //用户编号
QString customerName;//用户名称 QString customerName;//用户名称
QString posCheckNo; // POS小票号 QString posCheckNo; // POS小票号
...@@ -112,6 +116,8 @@ public: ...@@ -112,6 +116,8 @@ public:
QString longitude; QString longitude;
QString latitude; QString latitude;
QString street; QString street;
QString consigneeName; //收货人名
QString consigneePhone; //收货电话
QString addressDetail; QString addressDetail;
int orderIndex; int orderIndex;
int updateTime; int updateTime;
...@@ -145,6 +151,9 @@ public: ...@@ -145,6 +151,9 @@ public:
inline QString getWatercourseId()const{return watercourseId;} inline QString getWatercourseId()const{return watercourseId;}
inline void setWatercourseId(const QString& v){watercourseId = v;} inline void setWatercourseId(const QString& v){watercourseId = v;}
inline QString getPickupCode()const{return pickupCode;}
inline void setPickupCode(const QString& v){pickupCode = v;}
inline QString getCustomerId()const{return customerId;} inline QString getCustomerId()const{return customerId;}
inline void setCustomerId(const QString& v){customerId = v;} inline void setCustomerId(const QString& v){customerId = v;}
...@@ -226,6 +235,12 @@ public: ...@@ -226,6 +235,12 @@ public:
inline QString getStreet()const{return street;} inline QString getStreet()const{return street;}
inline void setStreet(const QString& v){street = v;} inline void setStreet(const QString& v){street = v;}
inline QString getConsigneeName()const{return consigneeName;}
inline void setConsigneeName(const QString& v){consigneeName = v;}
inline QString getConsigneePhone()const{return consigneePhone;}
inline void setConsigneePhone(const QString& v){consigneePhone = v;}
inline QString getAddressDetail()const{return addressDetail;} inline QString getAddressDetail()const{return addressDetail;}
inline void setAddressDetail(const QString& v){addressDetail = v;} inline void setAddressDetail(const QString& v){addressDetail = v;}
......
...@@ -30,6 +30,7 @@ SOURCES += main.cpp\ ...@@ -30,6 +30,7 @@ SOURCES += main.cpp\
alertForm.cpp \ alertForm.cpp \
DTools/configManger.cpp \ DTools/configManger.cpp \
Control/flowControl.cpp \ Control/flowControl.cpp \
LocalServer/loaclHttpServer.cpp \
Network/billSocket.cpp \ Network/billSocket.cpp \
DTools/dataManger.cpp \ DTools/dataManger.cpp \
Model/orderObject.cpp \ Model/orderObject.cpp \
...@@ -62,6 +63,7 @@ HEADERS += \ ...@@ -62,6 +63,7 @@ HEADERS += \
alertForm.h \ alertForm.h \
DTools/configManger.h \ DTools/configManger.h \
Control/flowControl.h \ Control/flowControl.h \
LocalServer/loaclHttpServer.h \
Network/billSocket.h \ Network/billSocket.h \
DTools/dataManger.h \ DTools/dataManger.h \
Model/orderObject.h \ Model/orderObject.h \
......
...@@ -123,6 +123,9 @@ ...@@ -123,6 +123,9 @@
#define OPERATIONNAME_REFUSEREFUND "拒绝" #define OPERATIONNAME_REFUSEREFUND "拒绝"
#define OPERATIONNAME_REFUNDORDER "退单" #define OPERATIONNAME_REFUNDORDER "退单"
// 定义性别:
#define FM_MALE "男"
#define FM_FEMALE "女"
//接口地址 //接口地址
#define INI_INTERFACE_ILOGIN "login" #define INI_INTERFACE_ILOGIN "login"
......
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