Commit e3950090 by wuyang.zou

fix some bug;

rebuild ssl lib;
 tag:4.2019.1225.1
parent 656314a7
# StarBucks Pms Plugin
## 目录
* [背景介绍](#背景介绍)
* [开发](#开发)
* [使用说明](#使用说明)
* [其他](#其他)
<a name="背景介绍"></a>
## 背景介绍
*功能* :为 Starbucks 生产管理系统 PMS, 同步线上订单到PMS本地数据库中<br/>
*意义* :是帮助PMS集成 门店全部渠道的全部订单 不可或缺的功能;
<a name="开发说明"></a>
## 开发
*【开发】 为了集成 QRedis,把编译器版本提升至 MSVC2015, 使用 Qt 5.9.8, 使用Qt Create 4.8.2; <br/>
*【编译】<br/>
<1> QRedis 是使用源码集成到项目中,需要注意仓库地址版本,特别注意存在submodule;<br/>
<2> 插件使用了https 通信协议,代码中 使能 QSslConfiguration,故需要使用MSVC2015 编译 Openssl源码,得到两个库文件(libeay32.dll , ssleay32.dll),放置与该插件应用目录下;<br/>
<3> 本次插件也使用了 MYSQL 数据库,故需要使用 源码编译 Mysql数据库连接动态库: libmysql.dll <br/>
*【测试】<br/>
<1> 功能等同 PosPlugin:显示门店营业状态,展示订单,心跳检查,网络状态展示,同步订单,自测订单,部分渠道退单等功能;<br/>
<2> 特别功能:插订单数据到 PMS 本地数据库,通过 RedisList 进行消息同步;<br/>
*【git repo】仓库地址:git@scm.starbucks.com:china/delivery-postakeout.git
分支:pmsDevelop <br/>
<a name="使用说明"></a>
## 使用说明
同POS插件;
...@@ -665,6 +665,7 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe ...@@ -665,6 +665,7 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe
// 拉取订单详情接口: 新增 渠道 参数 // 拉取订单详情接口: 新增 渠道 参数
url.append(QString("&")+JSON_CHANNEL+QString("=")+channel); url.append(QString("&")+JSON_CHANNEL+QString("=")+channel);
url.append(QString("&")+JSON_POSIPADDRESS+QString("=")+m_ipPortAddress); url.append(QString("&")+JSON_POSIPADDRESS+QString("=")+m_ipPortAddress);
url.append(QString("&")+JSON_PMSMACHINENO+QString("=")+m_pmsMachineNo);
QLOG_INFO() << QString("[<<<<---Pull Order Detail--->>>>][requestUrl:]")<<url; QLOG_INFO() << QString("[<<<<---Pull Order Detail--->>>>][requestUrl:]")<<url;
QUrl TempQUrl = url; QUrl TempQUrl = url;
m_pullOrderSocket->SetUrl(TempQUrl); m_pullOrderSocket->SetUrl(TempQUrl);
...@@ -673,6 +674,8 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe ...@@ -673,6 +674,8 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe
.arg(result).arg(error)<<recvJson; .arg(result).arg(error)<<recvJson;
if(!result) { if(!result) {
emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>"));
// refresh gui defaultStoreStatus;
emit doUpdateStoreStatus(0,0,0);
} else { } else {
qDebug()<<recvJson; qDebug()<<recvJson;
emit setNetStatus(QString::fromLocal8Bit("正常")); emit setNetStatus(QString::fromLocal8Bit("正常"));
...@@ -708,7 +711,7 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo) ...@@ -708,7 +711,7 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo)
QJsonObject sendJson; QJsonObject sendJson;
QJsonObject recvJson; QJsonObject recvJson;
int ordertotalSum; int ordertotalSum;
sendJson = DataManger::GetInstance().GetPullOrderListData(pageNo,pageSize); sendJson = DataManger::GetInstance().GetPullOrderListData( pageNo, pageSize, m_pmsMachineNo );
QLOG_INFO() << QString("[<<<<---FlowControl::_PullOrderList: Pull Order List--->>>>][requestData:]")<<sendJson; QLOG_INFO() << QString("[<<<<---FlowControl::_PullOrderList: Pull Order List--->>>>][requestData:]")<<sendJson;
if(ConfigManger::GetInstance().GetOrderSslConfig()) { if(ConfigManger::GetInstance().GetOrderSslConfig()) {
...@@ -728,6 +731,8 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo) ...@@ -728,6 +731,8 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo)
.arg(result).arg(error)<<recvJson; .arg(result).arg(error)<<recvJson;
if(!result) { if(!result) {
emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>"));
// refresh gui defaultStoreStatus;
emit doUpdateStoreStatus(0,0,0);
} else { } else {
qDebug()<<recvJson; qDebug()<<recvJson;
emit setNetStatus(QString::fromLocal8Bit("正常")); emit setNetStatus(QString::fromLocal8Bit("正常"));
...@@ -776,7 +781,7 @@ bool FlowControl::_SendHeart() ...@@ -776,7 +781,7 @@ bool FlowControl::_SendHeart()
QJsonObject recvJson; QJsonObject recvJson;
m_puginVersionComments = ConfigManger::GetInstance().GetOrderServerUrl(); m_puginVersionComments = ConfigManger::GetInstance().GetOrderServerUrl();
sendJson = DataManger::GetInstance().GetHeartData(m_password,m_posId,m_ipPortAddress,m_puginVersionComments,m_bLastHeartIsError); sendJson = DataManger::GetInstance().GetHeartData(m_password,m_posId,m_ipPortAddress,m_puginVersionComments,m_bLastHeartIsError,m_pmsMachineNo);
QLOG_INFO() << QString("[<<<<---Send Heart--->>>>][requestData:%1]")<<sendJson; QLOG_INFO() << QString("[<<<<---Send Heart--->>>>][requestData:%1]")<<sendJson;
QUrl TempQUrl = ConfigManger::GetInstance().GetLoginServerUrl()+ QUrl TempQUrl = ConfigManger::GetInstance().GetLoginServerUrl()+
ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_HEART); ConfigManger::GetInstance().GetInterfaceName(INI_INTERFACE_HEART);
...@@ -788,6 +793,8 @@ bool FlowControl::_SendHeart() ...@@ -788,6 +793,8 @@ bool FlowControl::_SendHeart()
{ {
m_bLastHeartIsError = true; m_bLastHeartIsError = true;
emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>"));
// refresh gui defaultStoreStatus;
emit doUpdateStoreStatus(0,0,0);
}else }else
{ {
QLOG_INFO() << QString("[<<<<---Send Heart Finish: code:%1--->>>>]").arg(recvJson[JSON_LOGINCODE].toInt()); QLOG_INFO() << QString("[<<<<---Send Heart Finish: code:%1--->>>>]").arg(recvJson[JSON_LOGINCODE].toInt());
...@@ -796,6 +803,8 @@ bool FlowControl::_SendHeart() ...@@ -796,6 +803,8 @@ bool FlowControl::_SendHeart()
result = false; result = false;
m_bLastHeartIsError = true; m_bLastHeartIsError = true;
emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#ff0000'>网络不稳定,正在重试</font>"));
// refresh gui defaultStoreStatus;
emit doUpdateStoreStatus(0,0,0);
}else{ }else{
result = true; result = true;
emit setNetStatus(QString::fromLocal8Bit("<font color='#f5f5f5'>正常</font>")); emit setNetStatus(QString::fromLocal8Bit("<font color='#f5f5f5'>正常</font>"));
...@@ -2962,7 +2971,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso ...@@ -2962,7 +2971,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
QString FlowControl::_Penny2Dollar(int penny) QString FlowControl::_Penny2Dollar(int penny)
{ {
double dollar = (double)penny/100; double dollar = static_cast<double>(penny/100);
return QString::number(dollar,'f',1); return QString::number(dollar,'f',1);
} }
......
...@@ -165,6 +165,27 @@ int ConfigManger::GetLoginSslConfig() ...@@ -165,6 +165,27 @@ int ConfigManger::GetLoginSslConfig()
return m_config->value("SSLConfig/login").toInt(); return m_config->value("SSLConfig/login").toInt();
} }
QString ConfigManger::GetMysqlIpConfig()
{
return m_config->value("MysqlConfig/ip").toString();
}
QString ConfigManger::GetMysqlPasswordConfig()
{
return m_config->value("MysqlConfig/password").toString();
}
QString ConfigManger::GetRedisIpConfig()
{
return m_config->value("RedisConfig/ip").toString();
}
QString ConfigManger::GetRedisPasswordConfig()
{
return m_config->value("RedisConfig/password").toString();
}
int ConfigManger::GetOrderSslConfig() int ConfigManger::GetOrderSslConfig()
{ {
return m_config->value("SSLConfig/order").toInt(); return m_config->value("SSLConfig/order").toInt();
......
...@@ -134,6 +134,15 @@ public: ...@@ -134,6 +134,15 @@ public:
int GetLoginSslConfig(); int GetLoginSslConfig();
int GetOrderSslConfig(); int GetOrderSslConfig();
// Get Mysql IP & Password Config;
QString GetMysqlIpConfig();
QString GetMysqlPasswordConfig();
// Get Redis IP & Password Config;
QString GetRedisIpConfig();
QString GetRedisPasswordConfig();
private: private:
ConfigManger(); ConfigManger();
ConfigManger(ConfigManger const&); ConfigManger(ConfigManger const&);
......
...@@ -60,7 +60,7 @@ QJsonObject DataManger::GetLoginData(const QString &partnerId, const QString &st ...@@ -60,7 +60,7 @@ QJsonObject DataManger::GetLoginData(const QString &partnerId, const QString &st
QJsonObject DataManger::GetHeartData(const QString &password,const QString &stationId, QJsonObject DataManger::GetHeartData(const QString &password,const QString &stationId,
const QString &ipAddress, const QString &versionComments, const QString &ipAddress, const QString &versionComments,
const bool lastHeartIsError) const bool lastHeartIsError,const QString &pmsMachineNo)
{ {
QJsonObject rObj; QJsonObject rObj;
rObj.insert(JSON_IPADDRESS, ipAddress); rObj.insert(JSON_IPADDRESS, ipAddress);
...@@ -70,6 +70,7 @@ QJsonObject DataManger::GetHeartData(const QString &password,const QString &stat ...@@ -70,6 +70,7 @@ QJsonObject DataManger::GetHeartData(const QString &password,const QString &stat
rObj.insert(JSON_MACHINECODE, stationId); rObj.insert(JSON_MACHINECODE, stationId);
rObj.insert(JSON_PLUGINVERSION, APP_VERSION); rObj.insert(JSON_PLUGINVERSION, APP_VERSION);
rObj.insert(JSON_PLUGINVERSIONCOMMENTS, versionComments); rObj.insert(JSON_PLUGINVERSIONCOMMENTS, versionComments);
rObj.insert(JSON_PMSMACHINENO, pmsMachineNo);
if(lastHeartIsError){ if(lastHeartIsError){
rObj.insert(JSON_SYNCSTORESTATUS, 1); rObj.insert(JSON_SYNCSTORESTATUS, 1);
}else{ }else{
...@@ -78,7 +79,7 @@ QJsonObject DataManger::GetHeartData(const QString &password,const QString &stat ...@@ -78,7 +79,7 @@ QJsonObject DataManger::GetHeartData(const QString &password,const QString &stat
return rObj; return rObj;
} }
QJsonObject DataManger::GetPullOrderListData(const int& pageNumber, const int& pageSize) QJsonObject DataManger::GetPullOrderListData(const int& pageNumber, const int& pageSize, const QString& pmsMachineNo)
{ {
QJsonObject rObj; QJsonObject rObj;
rObj.insert(JSON_PAGENUMBER,pageNumber); rObj.insert(JSON_PAGENUMBER,pageNumber);
...@@ -86,6 +87,8 @@ QJsonObject DataManger::GetPullOrderListData(const int& pageNumber, const int& p ...@@ -86,6 +87,8 @@ QJsonObject DataManger::GetPullOrderListData(const int& pageNumber, const int& p
rObj.insert(JSON_SHOPCODE,m_storeId); rObj.insert(JSON_SHOPCODE,m_storeId);
rObj.insert(JSON_POSIPADDRESS,QString("http://") + m_posIpAddress); rObj.insert(JSON_POSIPADDRESS,QString("http://") + m_posIpAddress);
rObj.insert(JSON_CHANNEL,QString("ALL")); rObj.insert(JSON_CHANNEL,QString("ALL"));
rObj.insert(JSON_PMSMACHINENO, pmsMachineNo);
//rObj.insert(JSON_AUTOCONFIRM, autoconfirm); //rObj.insert(JSON_AUTOCONFIRM, autoconfirm);
return rObj; return rObj;
} }
......
...@@ -44,12 +44,12 @@ public: ...@@ -44,12 +44,12 @@ public:
* 返回:登录数据 * 返回:登录数据
* */ * */
QJsonObject GetHeartData(const QString& password, const QString& stationId, const QString& ipAddress, QJsonObject GetHeartData(const QString& password, const QString& stationId, const QString& ipAddress,
const QString& versionComments, const bool lastHeartIsError); const QString& versionComments, const bool lastHeartIsError,const QString& pmsMachineNo);
/* 功能:获取拉取订单数据 /* 功能:获取拉取订单数据
* 参数:[1]时间戳 * 参数:[1]时间戳
* 返回:登录数据 * 返回:登录数据
* */ * */
QJsonObject GetPullOrderListData(const int &pageNumber=1, const int &pageSize=1000); QJsonObject GetPullOrderListData(const int &pageNumber=1, const int &pageSize=1000 ,const QString& pmsMachineNo ="001");
/* 功能:获取拉取配送员数据 /* 功能:获取拉取配送员数据
* 参数:[1]门店号[2]渠道代码 * 参数:[1]门店号[2]渠道代码
* 返回:登录数据 * 返回:登录数据
......
#include "pmsGetStoreConfig.h" #include "pmsGetStoreConfig.h"
#include "QsLog.h" #include "QsLog.h"
#include "DTools/configManger.h"
PmsGetStoreConfig::PmsGetStoreConfig() PmsGetStoreConfig::PmsGetStoreConfig()
{ {
QLOG_INFO()<<"[<<<<---PmsGetStoreConfig:: ConStructure PMS Get Store Config DataBase--->>>>]"; QLOG_INFO()<<"[<<<<---PmsGetStoreConfig:: ConStructure PMS Get Store Config DataBase--->>>>]";
...@@ -10,12 +12,16 @@ bool PmsGetStoreConfig::initPmsStoreConfigDB() { ...@@ -10,12 +12,16 @@ bool PmsGetStoreConfig::initPmsStoreConfigDB() {
m_sqlDb = QSqlDatabase::addDatabase("QMYSQL","PmsGetStoreConfig"); //数据库驱动类型为Mysql m_sqlDb = QSqlDatabase::addDatabase("QMYSQL","PmsGetStoreConfig"); //数据库驱动类型为Mysql
if(m_sqlDb.isValid()){ if(m_sqlDb.isValid()){
QLOG_INFO()<<"[<<<<---PmsGetStoreConfig driver is valid--->>>>]"; QLOG_INFO()<<"[<<<<---PmsGetStoreConfig driver is valid--->>>>]";
m_sqlDb.setHostName("192.168.99.100"); //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)
m_sqlDbIp = ConfigManger::GetInstance().GetMysqlIpConfig();
m_sqlDbPassword = ConfigManger::GetInstance().GetMysqlPasswordConfig();
m_sqlDb.setHostName( m_sqlDbIp.length() ? m_sqlDbIp :"127.0.0.1"); //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)
//m_sqlDb.setHostName("localhost"); // 本地测试; //m_sqlDb.setHostName("localhost"); // 本地测试;
m_sqlDb.setPort(3306); //连接数据库端口号,与设置一致 m_sqlDb.setPort(3306); //连接数据库端口号,与设置一致
m_sqlDb.setDatabaseName("pms"); //连接数据库名,与设置一致 m_sqlDb.setDatabaseName("pms"); //连接数据库名,与设置一致
m_sqlDb.setUserName("oms"); //数据库用户名,与设置一致 m_sqlDb.setUserName("oms"); //数据库用户名,与设置一致
m_sqlDb.setPassword("starbucks@oms"); m_sqlDb.setPassword(m_sqlDbPassword.length() ? m_sqlDbPassword :"starbucks@oms");
if(!m_sqlDb.open()) { //打开数据库 if(!m_sqlDb.open()) { //打开数据库
QLOG_ERROR()<<"[<<<<---PmsGetStoreConfig Open Database error:--->>>>]"<<m_sqlDb.lastError().text(); QLOG_ERROR()<<"[<<<<---PmsGetStoreConfig Open Database error:--->>>>]"<<m_sqlDb.lastError().text();
......
...@@ -37,6 +37,9 @@ private: ...@@ -37,6 +37,9 @@ private:
PmsGetStoreConfig& operator=(PmsGetStoreConfig const&); PmsGetStoreConfig& operator=(PmsGetStoreConfig const&);
QSqlDatabase m_sqlDb; QSqlDatabase m_sqlDb;
QString m_sqlDbIp;
QString m_sqlDbPassword;
signals: signals:
public slots: public slots:
......
...@@ -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 "DTools/configManger.h"
PmsOrdersData::PmsOrdersData() { PmsOrdersData::PmsOrdersData() {
QLOG_INFO()<<"[<<<<---PmsOrdersData:: Structure PMS Orders Table--->>>>]"; QLOG_INFO()<<"[<<<<---PmsOrdersData:: Structure PMS Orders Table--->>>>]";
...@@ -14,12 +15,15 @@ bool PmsOrdersData::initPmsOrdersData() { ...@@ -14,12 +15,15 @@ bool PmsOrdersData::initPmsOrdersData() {
if ( m_sqlDb.isValid() ) { if ( m_sqlDb.isValid() ) {
QLOG_INFO()<<"[<<<<---PmsOrdersData driver is valid--->>>>]"; QLOG_INFO()<<"[<<<<---PmsOrdersData driver is valid--->>>>]";
m_sqlDb.setHostName("192.168.99.100"); //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost) m_sqlDbIp = ConfigManger::GetInstance().GetMysqlIpConfig();
m_sqlDbPassword = ConfigManger::GetInstance().GetMysqlPasswordConfig();
m_sqlDb.setHostName( m_sqlDbIp.length() ? m_sqlDbIp :"127.0.0.1" ); //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)
//m_sqlDb.setHostName("localhost"); //本地测试; //m_sqlDb.setHostName("localhost"); //本地测试;
m_sqlDb.setPort(3306); //连接数据库端口号,与设置一致 m_sqlDb.setPort(3306); //连接数据库端口号,与设置一致
m_sqlDb.setDatabaseName("pms"); //连接数据库名,与设置一致 m_sqlDb.setDatabaseName("pms"); //连接数据库名,与设置一致
m_sqlDb.setUserName("oms"); //数据库用户名,与设置一致 m_sqlDb.setUserName("oms"); //数据库用户名,与设置一致
m_sqlDb.setPassword("starbucks@oms"); m_sqlDb.setPassword(m_sqlDbPassword.length() ? m_sqlDbPassword :"starbucks@oms");
if(!m_sqlDb.open()) { //打开数据库 if(!m_sqlDb.open()) { //打开数据库
QLOG_ERROR()<<"[<<<<---PmsOrdersData Open Database error:--->>>>]"<<m_sqlDb.lastError().text(); QLOG_ERROR()<<"[<<<<---PmsOrdersData Open Database error:--->>>>]"<<m_sqlDb.lastError().text();
...@@ -206,9 +210,18 @@ bool PmsOrdersData::insertProductData(const QList<dishesObject*> proList, const ...@@ -206,9 +210,18 @@ bool PmsOrdersData::insertProductData(const QList<dishesObject*> proList, const
bool insertProRet = false; bool insertProRet = false;
bool insertSubProRet = false; bool insertSubProRet = false;
int insertProSucNum = 0; int insertProSucNum = 0;
int availProNum = 0; // Skip Some Invalid Products;
QString MainProOptions = "" ;
if(proList.count()) { if(proList.count()) {
foreach(dishesObject* dishesObjectTemp, proList){ foreach(dishesObject* dishesObjectTemp, proList){
QString tempCodeLeftHead = dishesObjectTemp->code.left(1);
if ( dishesObjectTemp->code.contains("Default",Qt::CaseInsensitive) || (tempCodeLeftHead<QString('0')||tempCodeLeftHead>QString('9')) || !dishesObjectTemp->qty ){
continue;
}
++availProNum;
QSqlQuery query(m_sqlDb); QSqlQuery query(m_sqlDb);
query.prepare("INSERT INTO order_items(order_id,product_id, product_code, product_name, en_product_name, product_qty, item_total," query.prepare("INSERT INTO order_items(order_id,product_id, product_code, product_name, en_product_name, product_qty, item_total,"
"spec_id, spec_name, en_spec_name, price, promotion_name, promotion_price, promotion_qty, promotion_sku," "spec_id, spec_name, en_spec_name, price, promotion_name, promotion_price, promotion_qty, promotion_sku,"
...@@ -248,23 +261,31 @@ bool PmsOrdersData::insertProductData(const QList<dishesObject*> proList, const ...@@ -248,23 +261,31 @@ bool PmsOrdersData::insertProductData(const QList<dishesObject*> proList, const
QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertOrderProductData:Insert OrderId %1 Product Success code:%2 increaseId:%3--->>>>]") QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertOrderProductData:Insert OrderId %1 Product Success code:%2 increaseId:%3--->>>>]")
.arg(OrderId).arg(dishesObjectTemp->code).arg(ProInIdRef); .arg(OrderId).arg(dishesObjectTemp->code).arg(ProInIdRef);
QString SubProInIdRef; QString SubProInIdRef;
//插入配料商品数据; //插入配料商品数据+Special Hot / Cold;
if( dishesObjectTemp->sub_products.count() ) { MainProOptions = dishesObjectTemp->options;
insertSubProRet = insertSubProductData(dishesObjectTemp->sub_products, ProInIdRef, SubProInIdRef); if( dishesObjectTemp->sub_products.count() || !MainProOptions.isEmpty() ) {
insertSubProRet = insertSubProductData(dishesObjectTemp->sub_products,MainProOptions, ProInIdRef, SubProInIdRef);
if(insertSubProRet){ if(insertSubProRet){
insertProSucNum++; insertProSucNum++;
} else{ // insertSubProductData occurred Error And Faild Need Return False Immediately;
insertProRet = false;
QLOG_ERROR()<<QString("[<<<<---PmsOrdersData::insertSubProductData: Insert MainProduct code:%1's SubProduct Failed --->>>>]").arg(dishesObjectTemp->code);
return insertProRet;
} }
} else { } else {
insertProSucNum++; insertProSucNum++;
} }
} }
} }
}else{ }else{
QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertProductData OrderId %1 Has No Products--->>>>]").arg(OrderId); QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertProductData OrderId %1 Has No Products--->>>>]").arg(OrderId);
} }
if(insertProSucNum == proList.count()){
if( insertProSucNum == availProNum ){
insertProRet = true; insertProRet = true;
} }
return insertProRet; return insertProRet;
} }
...@@ -275,10 +296,10 @@ bool PmsOrdersData::deleteProductData(OrderObject* orderObj) { ...@@ -275,10 +296,10 @@ bool PmsOrdersData::deleteProductData(OrderObject* orderObj) {
bool delSubProductFailRet = false; bool delSubProductFailRet = false;
int id = 0; int id = 0;
QSqlQuery query(m_sqlDb); QSqlQuery query(m_sqlDb);
query.prepare(QString("select id from orders_items where order_id='%1'").arg(orderObj->id)); query.prepare(QString("select id from order_items where order_id='%1'").arg(orderObj->id));
if(!query.exec()) { if(!query.exec()) {
QLOG_ERROR()<<query.lastError().text()<<"[<<<<---PmsOrdersData::deleteProductData" QLOG_ERROR()<<query.lastError().text()<<"[<<<<---PmsOrdersData::deleteProductData"
" select id from orders_items Failed orderId:--->>>>]"<<orderObj->id; " select id from order_items Failed orderId:--->>>>]"<<orderObj->id;
delSubProductFailRet = true; delSubProductFailRet = true;
delProductFailRet = true; delProductFailRet = true;
} else { } else {
...@@ -293,10 +314,10 @@ bool PmsOrdersData::deleteProductData(OrderObject* orderObj) { ...@@ -293,10 +314,10 @@ bool PmsOrdersData::deleteProductData(OrderObject* orderObj) {
} }
} }
//批量删除主商品; //批量删除主商品;
query.prepare(QString("delete from orders_items where order_id='%1'").arg(orderObj->id) ); query.prepare(QString("delete from order_items where order_id='%1'").arg(orderObj->id) );
if(!query.exec()) { if(!query.exec()) {
QLOG_ERROR()<<query.lastError().text()<<QString("[<<<<---PmsOrdersData::deleteProductData" QLOG_ERROR()<<query.lastError().text()<<QString("[<<<<---PmsOrdersData::deleteProductData"
" delete from orders_items where order_id='%1' Failed--->>>>]").arg(orderObj->id); " delete from order_items where order_id='%1' Failed--->>>>]").arg(orderObj->id);
delProductFailRet = true; delProductFailRet = true;
} }
} }
...@@ -311,11 +332,21 @@ bool PmsOrdersData::deleteProductData(OrderObject* orderObj) { ...@@ -311,11 +332,21 @@ bool PmsOrdersData::deleteProductData(OrderObject* orderObj) {
} }
//此函数将会在 insertProductData 函数中调用;顾无需加锁 否则 会导致死锁; //此函数将会在 insertProductData 函数中调用;顾无需加锁 否则 会导致死锁;
bool PmsOrdersData::insertSubProductData(const QList<dishesObject*> sub_products, const QString& ProInIdRef, QString& SubProInIdRef) { bool PmsOrdersData::insertSubProductData(const QList<dishesObject*> sub_products, const QString& MainProOptions ,const QString& ProInIdRef, QString& SubProInIdRef) {
bool insertSubProRet = false; bool insertSubProRet = false;
int insertSubProSucNum = 0; int insertSubProSucNum = 0;
int availSubProNum = 0; // Skip Some Invalid Sub Products;
if(sub_products.count()) { if(sub_products.count()) {
foreach(dishesObject* subDishesObjectTemp, sub_products){ foreach(dishesObject* subDishesObjectTemp, sub_products){
QString tempSubCodeLeftHead = subDishesObjectTemp->code.left(1);
if ( subDishesObjectTemp->code.contains("Default",Qt::CaseInsensitive) || (tempSubCodeLeftHead<QString('0') || tempSubCodeLeftHead>QString('9')) || !subDishesObjectTemp->qty ){
continue;
}
++availSubProNum;
QSqlQuery query(m_sqlDb); QSqlQuery query(m_sqlDb);
query.prepare("INSERT INTO order_item_condiments(item_id,condiment_id, condiment_code, condiment_name, en_condiment_name," query.prepare("INSERT INTO order_item_condiments(item_id,condiment_id, condiment_code, condiment_name, en_condiment_name,"
" price, condimen_total, sequence, qty ) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"); " price, condimen_total, sequence, qty ) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");
...@@ -339,8 +370,9 @@ bool PmsOrdersData::insertSubProductData(const QList<dishesObject*> sub_products ...@@ -339,8 +370,9 @@ bool PmsOrdersData::insertSubProductData(const QList<dishesObject*> sub_products
.arg(subDishesObjectTemp->enProductName).arg(subDishesObjectTemp->price * 0.01).arg(0).arg(subDishesObjectTemp->sequence).arg(subDishesObjectTemp->qty); .arg(subDishesObjectTemp->enProductName).arg(subDishesObjectTemp->price * 0.01).arg(0).arg(subDishesObjectTemp->sequence).arg(subDishesObjectTemp->qty);
} else { } else {
SubProInIdRef = query.lastInsertId().toString(); SubProInIdRef = query.lastInsertId().toString();
QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertSubProductData:Insert ProInIdRef:%1 subProduct Success code:%2 increaseId:%3--->>>>]") QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertSubProductData:Insert ProInIdRef:%1 subProduct Success code:%2 SubProInIdRef:%3"
.arg(ProInIdRef).arg(subDishesObjectTemp->code).arg(SubProInIdRef); " increaseId:%4--->>>>]")
.arg(ProInIdRef).arg(subDishesObjectTemp->code).arg(SubProInIdRef).arg( query.lastInsertId().toString() );
insertSubProSucNum++; insertSubProSucNum++;
} }
} }
...@@ -348,7 +380,33 @@ bool PmsOrdersData::insertSubProductData(const QList<dishesObject*> sub_products ...@@ -348,7 +380,33 @@ bool PmsOrdersData::insertSubProductData(const QList<dishesObject*> sub_products
QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertSubProductData ProInIdRef:%1 Has No subProducts--->>>>]").arg(ProInIdRef); QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertSubProductData ProInIdRef:%1 Has No subProducts--->>>>]").arg(ProInIdRef);
} }
if(insertSubProSucNum == sub_products.count()){ //Special Insert MainProOptions;
if( !MainProOptions.isEmpty() ) {
++availSubProNum;
QSqlQuery query(m_sqlDb);
query.prepare("INSERT INTO order_item_condiments(item_id, condiment_code , price, condimen_total , qty ) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");
query.addBindValue(ProInIdRef.toInt()); // --主商品自增编号
query.addBindValue(MainProOptions); // --子商品code
query.addBindValue(0); // --子商品价格
query.addBindValue(0); // --子商品应收价格 dishesObjectTemp->totalQuantityPrice ????????
query.addBindValue(1); // --子商品数量
if(!query.exec()) {
QLOG_ERROR()<<QString("[<<<<---PmsOrdersData::insertSubProductData:Insert ProInIdRef:%1 MainProOptions code:%2 Failed --->>>>]")
.arg(ProInIdRef).arg(MainProOptions)
<<query.lastError().text()<<QString::number(query.lastError().type());
QLOG_ERROR()<<QString("INSERT INTO order_item_condiments(item_id, condiment_code , price, condimen_total , qty ) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)")
.arg(ProInIdRef.toInt()).arg(MainProOptions).arg(0).arg(0).arg(1);
} else {
SubProInIdRef = query.lastInsertId().toString();
QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertSubProductData:Insert ProInIdRef:%1 MainProOptions Success code:%2 SubProInIdRef:%3"
" increaseId:%4--->>>>]")
.arg(ProInIdRef).arg(MainProOptions).arg(SubProInIdRef).arg( query.lastInsertId().toString() );
insertSubProSucNum++;
}
}
if(insertSubProSucNum == availSubProNum ){
insertSubProRet = true; insertSubProRet = true;
} }
return insertSubProRet; return insertSubProRet;
......
...@@ -57,7 +57,7 @@ public: ...@@ -57,7 +57,7 @@ public:
*参数:[1]订单对象指针 [2]返回插入成功后的自增序号; *参数:[1]订单对象指针 [2]返回插入成功后的自增序号;
*返回:true操作成功,false失败 *返回:true操作成功,false失败
**/ **/
bool insertSubProductData(const QList<dishesObject*> sub_products, const QString& ProInIdRef, QString& SubProInIdRef); bool insertSubProductData(const QList<dishesObject*> sub_products, const QString& MainProOptions, const QString& ProInIdRef, QString& SubProInIdRef);
/** /**
*功能: 根据订单ID 更新 数据库中 Order 订单状态信息; *功能: 根据订单ID 更新 数据库中 Order 订单状态信息;
...@@ -89,6 +89,9 @@ private: ...@@ -89,6 +89,9 @@ private:
PmsOrdersData& operator=(PmsOrdersData const&); PmsOrdersData& operator=(PmsOrdersData const&);
QSqlDatabase m_sqlDb; QSqlDatabase m_sqlDb;
QString m_sqlDbIp;
QString m_sqlDbPassword;
signals: signals:
public slots: public slots:
......
#include "qtRedisClient.h" #include "qtRedisClient.h"
#include "QsLog.h" #include "QsLog.h"
#include "DTools/configManger.h"
QtRedisClient::QtRedisClient() QtRedisClient::QtRedisClient()
{ {
QLOG_INFO()<<"[<<<<---QtRedisClient:: ConStructure Redis Begin --->>>>]"; QLOG_INFO()<<"[<<<<---QtRedisClient:: ConStructure Redis Begin --->>>>]";
initRedisClient(); initRedisClient();
m_RedisConnectCnf.setHost("192.168.99.100"); m_redisIp = ConfigManger::GetInstance().GetRedisIpConfig();
//m_redisPassword = ConfigManger::GetInstance().GetRedisPasswordConfig();
m_RedisConnectCnf.setHost(m_redisIp.length()? m_redisIp : "127.0.0.1");
//m_RedisConnectCnf.setHost("127.0.0.1"); //本地测试; //m_RedisConnectCnf.setHost("127.0.0.1"); //本地测试;
m_RedisConnectCnf.setPort(6379); m_RedisConnectCnf.setPort(6379);
//m_RedisConnectCnf.setAuth("123456"); //本地测试; //m_RedisConnectCnf.setAuth("123456"); //本地测试;
......
...@@ -45,6 +45,10 @@ private: ...@@ -45,6 +45,10 @@ private:
RedisClient::ConnectionConfig m_RedisConnectCnf; RedisClient::ConnectionConfig m_RedisConnectCnf;
RedisClient::Connection* m_pRedisConnectOperat = nullptr; RedisClient::Connection* m_pRedisConnectOperat = nullptr;
QString m_redisIp;
QString m_redisPassword;
signals: signals:
public slots: public slots:
......
...@@ -26,11 +26,15 @@ bool SimProcOrderDB::initSimProcOrderDB(){ ...@@ -26,11 +26,15 @@ bool SimProcOrderDB::initSimProcOrderDB(){
m_sqlDb.setUserName("sa"); //登录用户 m_sqlDb.setUserName("sa"); //登录用户
m_sqlDb.setPassword("SIM29@123"); m_sqlDb.setPassword("SIM29@123");
*/ */
m_sqlDb.setHostName("192.168.99.100"); //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)
//PMS No Use;
/*
m_sqlDb.setHostName("127.0.0.1"); //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)
m_sqlDb.setPort(3306); //连接数据库端口号,与设置一致 m_sqlDb.setPort(3306); //连接数据库端口号,与设置一致
m_sqlDb.setDatabaseName("pms"); //连接数据库名,与设置一致 m_sqlDb.setDatabaseName("pms"); //连接数据库名,与设置一致
m_sqlDb.setUserName("oms"); //数据库用户名,与设置一致 m_sqlDb.setUserName("oms"); //数据库用户名,与设置一致
m_sqlDb.setPassword("starbucks@oms"); //数据库密码,与设置一致 m_sqlDb.setPassword("starbucks@oms"); //数据库密码,与设置一致
*/
if(!m_sqlDb.open()) { //打开数据库 if(!m_sqlDb.open()) { //打开数据库
QLOG_ERROR()<<"[<<<<---SimProcOrderDB:: Open Database error:--->>>>]"<<m_sqlDb.lastError().text(); QLOG_ERROR()<<"[<<<<---SimProcOrderDB:: Open Database error:--->>>>]"<<m_sqlDb.lastError().text();
......
...@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico" ...@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif #endif
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***// //***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 4,2019,1031,1 FILEVERSION 4,2019,1225,1
PRODUCTVERSION 4,2019,1031,1 PRODUCTVERSION 4,2019,1225,1
//*************************************************************************// //*************************************************************************//
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
...@@ -27,12 +27,12 @@ VS_VERSION_INFO VERSIONINFO ...@@ -27,12 +27,12 @@ VS_VERSION_INFO VERSIONINFO
VALUE "CompanyName", "ShangHai.Freemud Co., Ltd." VALUE "CompanyName", "ShangHai.Freemud Co., Ltd."
VALUE "FileDescription", "PMS Plugin Application" VALUE "FileDescription", "PMS Plugin Application"
VALUE "InternalName", "PmsPlugin.exe" VALUE "InternalName", "PmsPlugin.exe"
VALUE "LegalCopyright", "Copyright (C)2013-2019" VALUE "LegalCopyright", "Copyright (C)2013-2020"
VALUE "OriginalFilename", "PmsPlugin.exe" VALUE "OriginalFilename", "PmsPlugin.exe"
VALUE "ProductName", "PMS Plugin" VALUE "ProductName", "PMS Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***// //***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "4.2019.1031.1" VALUE "ProductVersion", "4.2019.1225.1"
VALUE "FileVersion", "4.2019.1031.1" VALUE "FileVersion", "4.2019.1225.1"
//*************************************************************************// //*************************************************************************//
END END
END END
......
...@@ -50,6 +50,18 @@ void LoadTheme(const QString& theme) ...@@ -50,6 +50,18 @@ void LoadTheme(const QString& theme)
qssFile.close(); qssFile.close();
} }
void FixAppEnvirment() {
QString curEnvPath = QProcessEnvironment::systemEnvironment().value("PATH");
QString dstEnvPath ;
dstEnvPath.append(g_appDir);
dstEnvPath.append(curEnvPath);
if ( !dstEnvPath.isEmpty() ) {
QLOG_INFO() << QString("Current path env::%s").arg(dstEnvPath);
} else {
QLOG_INFO() << QString("Current path env is empty");
}
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
...@@ -73,6 +85,9 @@ int main(int argc, char *argv[]) ...@@ -73,6 +85,9 @@ int main(int argc, char *argv[])
// 初始化日志 // 初始化日志
InitLogger(); InitLogger();
// 修正环境变量;
// FixAppEnvirment();
// 加载主题 // 加载主题
LoadTheme(APP_THEME); LoadTheme(APP_THEME);
......
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
#define APP_THEME "deaufult" #define APP_THEME "deaufult"
#define APP_VERSION "4.2019.1031.1" //#define APP_VERSION "4.2019.1031.1"
#define APP_VERSION "4.2019.1225.1"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号 //修正版本号时,切记修正 FmTakeout.rc 中的版本号
#define SERVER_PASSWORD "posoperator@freemud.cn" #define SERVER_PASSWORD "posoperator@freemud.cn"
......
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