Commit b76f2edb by wuyang.zou

POS 插件:

1、设备 ip 展示 (过滤非合法ip 和 mac地址并进行排序);
2、黑金优先制作:会员等级 + 打印扩展列表;
3、插件开机立刻启动,出现数据库服务还未Ready,插件连接异常导致登陆失败,新增插件连接异常重连机制;
4、针对OnePos 守护程序的路径变更为正确路径;
5、插件数据库表自增id 长度的考虑扩增;
------------------------------------------------------------------------------------
tb_main_prod_refinfo     自增ID 目前  2105692 【2,147,483,647】
tb_msr_customer_info    自增ID 目前 719439    【2,147,483,647】
tb_order_promotions      自增ID 目前 22803      【2,147,483,647】
tb_print_msr_customer   自增ID 目前 714955    【2,147,483,647】
--------------------------------------------------
SimProcOrderTable    无新增 ID
tb_notice_msg            数据量小可以忽略
------------------------------------------------------------------------------------
parent a2341a01
Pipeline #43790 failed with stage
in 0 seconds
...@@ -46,14 +46,12 @@ SocketCommunicate::~SocketCommunicate() ...@@ -46,14 +46,12 @@ SocketCommunicate::~SocketCommunicate()
while(!_stoped) { while(!_stoped) {
QLOG_INFO() << QString("SocketCommunicate:: ~SocketCommunicate()......"); QLOG_INFO() << QString("SocketCommunicate:: ~SocketCommunicate()......");
_stopFlag = true; _stopFlag = true;
if ( _sslSocket ) { if ( _sslSocket ) {
_sslSocket->disconnectFromHost(); // free Host And Port Resource; _sslSocket->disconnectFromHost(); // free Host And Port Resource;
// https://doc.qt.io/archives/qtjambi-4.5.2_01/com/trolltech/qt/network/QAbstractSocket.html#disconnectFromHost() // https://doc.qt.io/archives/qtjambi-4.5.2_01/com/trolltech/qt/network/QAbstractSocket.html#disconnectFromHost()
// Will Emit signal: disconnected() , Then Trigger Slot: deleteLater() // Will Emit signal: disconnected() , Then Trigger Slot: deleteLater()
// delete _sslSocket; _sslSocket = nullptr; // delete _sslSocket; _sslSocket = nullptr;
} }
emit quit(); emit quit();
EVENTWAIT(20); EVENTWAIT(20);
this->threadClose(); this->threadClose();
...@@ -100,13 +98,15 @@ bool SocketCommunicate::connectTcpSvr() ...@@ -100,13 +98,15 @@ bool SocketCommunicate::connectTcpSvr()
//下载证书接口(需要门店号 & 设备号)待调试, 评估是否需要保存证书文件: //下载证书接口(需要门店号 & 设备号)待调试, 评估是否需要保存证书文件:
QLOG_INFO() << "connectTcpSvr::Get Certificate From Url: ......................"; QLOG_INFO() << "connectTcpSvr::Get Certificate From Url: ......................";
std::string tempMacAddress = ""; std::string tempMacAddress = "";
int getMacRet = MacTool::GetMacByAdaptersAddresses( tempMacAddress ); std::string tempIpAddress = "";
int getMacRet = MacTool::GetMacByAdaptersAddresses( tempMacAddress , tempIpAddress );
if ( !getMacRet) { if ( !getMacRet) {
QLOG_ERROR() << "connectTcpSvr:: MacTool::GetMacByAdaptersAddresses Falied"; QLOG_ERROR() << "connectTcpSvr:: MacTool::GetMacByAdaptersAddresses Falied";
// 是否需要弹框提示 伙伴. // 是否需要弹框提示 伙伴.
} }
_macAddress = tempMacAddress.c_str(); _macAddress = tempMacAddress.c_str();
_localIp = tempIpAddress.c_str();
// 组装请求头+请求体, 获取证书相关数据; // 组装请求头+请求体, 获取证书相关数据;
QString reqCertificateRealUrl = _getCertificateUrl + "storeId=" + _storeId + "&deviceId=" + _macAddress; QString reqCertificateRealUrl = _getCertificateUrl + "storeId=" + _storeId + "&deviceId=" + _macAddress;
...@@ -115,7 +115,7 @@ bool SocketCommunicate::connectTcpSvr() ...@@ -115,7 +115,7 @@ bool SocketCommunicate::connectTcpSvr()
QString requestError; QString requestError;
int requestErrorNum = 0; int requestErrorNum = 0;
// 如果获取证书失败,需要循环获取,且频次需要越来越低; // 如果获取证书失败,需要循环获取,且频次需要越来越低;
if ( 0 == _certPublishKey.length() || 0 == _certPrivateKey.length() ) { if ( 0 == _certPublishKey.length() || 0 == _certPrivateKey.length() || _reconnectTimes >= 5 ) {
do { do {
if ( S_GetRequest( reqCertificateRealUrl, outCertificateData, requestError) ) { if ( S_GetRequest( reqCertificateRealUrl, outCertificateData, requestError) ) {
...@@ -799,7 +799,7 @@ void SocketCommunicate::threadStart() ...@@ -799,7 +799,7 @@ void SocketCommunicate::threadStart()
} }
QLOG_INFO() << QString("Waitting HttpLogin / openTcpChannel / GetSvrIpPort Failed, Wait 10 Seconds, _httpLoginResult:%1, _openTcpChannel:%2, _stopFlag:%3") QLOG_INFO() << QString("Waitting HttpLogin / openTcpChannel / GetSvrIpPort Failed, Wait 10 Seconds, _httpLoginResult:%1, _openTcpChannel:%2, _stopFlag:%3")
.arg( _httpLoginResult?1:0 ).arg(_openTcpChannel?1:0).arg(_stopFlag?1:0); .arg( _httpLoginResult?1:0 ).arg(_openTcpChannel?1:0).arg(_stopFlag?1:0);
Sleep( SOCKET_START_TIMEOUT_INTERVAL ); Sleep( SOCKET_START_CHECK_TIMEOUT_INTERVAL );
FlowControl::GetInstance()._GetFcMajorInfo(_httpLoginResult, _openTcpChannel, _storeId, _localIp, _hostName,_workStationNum,_backupPos); FlowControl::GetInstance()._GetFcMajorInfo(_httpLoginResult, _openTcpChannel, _storeId, _localIp, _hostName,_workStationNum,_backupPos);
} }
......
...@@ -174,6 +174,7 @@ private: ...@@ -174,6 +174,7 @@ private:
QTimer *m_reportOMSReocrdOrderTimer; QTimer *m_reportOMSReocrdOrderTimer;
QTimer *m_presistInputPosSuccessReocrdTimer; QTimer *m_presistInputPosSuccessReocrdTimer;
QTimer *m_loginTimer; QTimer *m_loginTimer;
QTimer *m_loopRefreshTimer;
QTimer *m_queryAllNoticeTimer; QTimer *m_queryAllNoticeTimer;
QTimer *m_storageOrderTimer; QTimer *m_storageOrderTimer;
QTimer *m_delayGetRefundDetailTimer; QTimer *m_delayGetRefundDetailTimer;
...@@ -249,7 +250,6 @@ private: ...@@ -249,7 +250,6 @@ private:
//新增三个bool变量用来标识 程序初始化时,两个数据库中的三张表是否能够连接正常; //新增三个bool变量用来标识 程序初始化时,两个数据库中的三张表是否能够连接正常;
bool m_initSimProcOrderDBRet; bool m_initSimProcOrderDBRet;
bool m_initPrintSumBillPosDBRet; bool m_initPrintSumBillPosDBRet;
bool m_initGetAuthPosDBRet;
bool m_initPrintCupStickPosDBRet; bool m_initPrintCupStickPosDBRet;
bool m_initPrintMsgQueueDBRet; bool m_initPrintMsgQueueDBRet;
bool m_initPrintOrderPromotionDBRet; bool m_initPrintOrderPromotionDBRet;
...@@ -315,6 +315,13 @@ signals: ...@@ -315,6 +315,13 @@ signals:
* 返回:NULL * 返回:NULL
* */ * */
void setStoreInfo(const QString& storeId); void setStoreInfo(const QString& storeId);
/* 功能:设置主界面终端IP
* 参数:[1]终端IP
* 返回:NULL
* */
void setTerminalIp(const QString& terminalIp);
/* 功能:设置主界收银员信息 /* 功能:设置主界收银员信息
* 参数:[1]收银员信息 * 参数:[1]收银员信息
* 返回:NULL * 返回:NULL
...@@ -501,6 +508,8 @@ private slots: ...@@ -501,6 +508,8 @@ private slots:
void _ClickToLogin(); void _ClickToLogin();
void _LoopRefresh();
void RefreshPosMetaData(); void RefreshPosMetaData();
void _QueryAllNoticeMsg(); void _QueryAllNoticeMsg();
......
...@@ -106,3 +106,32 @@ bool PosMetaDataDB::queryPosMetaDataDB( PosMateDataObject* posMateDataObj) { ...@@ -106,3 +106,32 @@ bool PosMetaDataDB::queryPosMetaDataDB( PosMateDataObject* posMateDataObj) {
m_sqlDb.close(); m_sqlDb.close();
return result; return result;
} }
QString PosMetaDataDB::getDbStoreId() {
QMutexLocker mutex(&m_mutex);
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return "";
}
QString result = "";
QSqlQuery query(m_sqlDb);
QLOG_INFO()<< QString("SELECT TOP 1 ObjectNumber FROM [DataStore].[dbo].[V_HIERARCHY] where Parent1=1");
query.prepare( QString("SELECT TOP 1 ObjectNumber FROM [DataStore].[dbo].[V_HIERARCHY] where Parent1=1") );
if ( !query.exec() ) {
QLOG_ERROR()<<"[<<<<---SqlServer Database:getDbStoreId--->>>>]"<<query.lastError().text();
result= "";
}
if ( query.first() ) {
result= query.value(0).toString();
QLOG_INFO()<<QString("[<<<<---SqlServer Database, getDbStoreId: %1--->>>>]").arg(result);
} else {
result = "";
}
m_sqlDb.close();
return result;
}
...@@ -29,6 +29,14 @@ public: ...@@ -29,6 +29,14 @@ public:
**/ **/
bool queryPosMetaDataDB(PosMateDataObject* posMateDataObj); bool queryPosMetaDataDB(PosMateDataObject* posMateDataObj);
/**
*功能:查询 “门店号” 是否存在本地的POS系统中;
*参数:[0]
*返回: 查询成功的门店号;
**/
QString getDbStoreId();
private: private:
QMutex m_mutex; QMutex m_mutex;
PosMetaDataDB(); PosMetaDataDB();
...@@ -36,6 +44,7 @@ private: ...@@ -36,6 +44,7 @@ private:
PosMetaDataDB& operator=(PosMetaDataDB const&); PosMetaDataDB& operator=(PosMetaDataDB const&);
QSqlDatabase m_sqlDb; QSqlDatabase m_sqlDb;
bool m_configTableExist; bool m_configTableExist;
QString m_dbStoreId;
signals: signals:
......
...@@ -20,10 +20,67 @@ ConfigManger::ConfigManger() ...@@ -20,10 +20,67 @@ ConfigManger::ConfigManger()
QString appDir = QApplication::applicationDirPath(); QString appDir = QApplication::applicationDirPath();
QString config = QString("%1/%2").arg(appDir).arg(CONFIG_NAME); QString config = QString("%1/%2").arg(appDir).arg(CONFIG_NAME);
QString userConfig = QString("%1/%2").arg(appDir).arg(USERCONFIG_NAME); QString userConfig = QString("%1/%2").arg(appDir).arg(USERCONFIG_NAME);
QString proxyServiceConfig = QString("C:\\Freemud\\daemonService\\fmproxy_service.config");
m_config = new QSettings(config, QSettings::IniFormat); m_config = new QSettings(config, QSettings::IniFormat);
m_userConfig = new QSettings(userConfig, QSettings::IniFormat); m_userConfig = new QSettings(userConfig, QSettings::IniFormat);
/* // One Pos 守护程序: 守护插件的路径的修改;
[FMKeeper]
Heartbeat={"fm_cmd":4}
HeartbeatPeer=24409
ServiceName=PosPluginDaemon
HeartbeatTryCnt=5
CheckInterval=180
PersistLaunch=0
KillElapse=0
DefaultExe=C:\\freemud\\fmPlugin\\fmTakeout.exe //<<---//
ServiceStartMode=2
ServiceStartDelayInterval=330
DaemonMultiProcessMode=1
MultiProcessPortExeMap=24409@C:\\freemud\\fmPlugin\\fmTakeout.exe;8080@C:\\Micros\\Simphony\\WebServer\\ServiceHost.exe //<<---//
ExtraDaemonServiceNameList=SbuxCapsServices;
*/
//判断文件是否存在,不存在则置空,存在则配置;
QFileInfo proxyServiceConfigFileInfo(proxyServiceConfig);
if ( proxyServiceConfigFileInfo.isFile() )
{
//QFile::rename(newConfigFileFullName ,newBakConfigFileFullName);
//QFile::copy(configFileFullName, newConfigFileFullName);
//QLOG_INFO() << QString(" Copy config.ini File:: %1 To %2 Success !!!").arg(configFileFullName).arg(newConfigFileFullName);
m_proxyServiceConfig = new QSettings(proxyServiceConfig, QSettings::IniFormat);
QString tempProcessMapCfg = m_proxyServiceConfig->value(INI_DAEMON_PROCESS_MAP_KEY).toString();
QString tempDefaultExeCfg = m_proxyServiceConfig->value(INI_DAEMON_DEFAULT_EXE_KEY).toString();
// 输出检查;
QLOG_INFO() << QString(" One Pos(Backup Pos) Daemon DefaultExe::%1 ; Daemon Service List:: %2 ").arg(tempDefaultExeCfg).arg(tempProcessMapCfg);
if ( tempProcessMapCfg.indexOf(INI_DAEMON_PROCESS_MAP_VALUE,Qt::CaseInsensitive) >= 0
&& tempDefaultExeCfg.indexOf(INI_DAEMON_DEFAULT_EXE_VALUE,Qt::CaseInsensitive) >= 0 ) {
QLOG_INFO() << QString(" One Pos(Backup Pos) Value Is New, No Need Modify !!!");
} else {
// 重置新路径配置;
if ( m_proxyServiceConfig->isWritable() ) {
QString tempNewProcessMapCfg = QString("24409@C:\\freemud\\fmPluginNew\\fmTakeout.exe;8080@C:\\Micros\\Simphony\\WebServer\\ServiceHost.exe");
m_proxyServiceConfig->setValue(INI_DAEMON_PROCESS_MAP_KEY, tempNewProcessMapCfg.trimmed());
QString tempNewDefaultExeCfg = "C:\\freemud\\fmPluginNew\\fmTakeout.exe";
m_proxyServiceConfig->setValue( INI_DAEMON_DEFAULT_EXE_KEY, tempNewDefaultExeCfg);
// 修改后再次输出检查;
tempProcessMapCfg = m_proxyServiceConfig->value(INI_DAEMON_PROCESS_MAP_KEY).toString();
tempDefaultExeCfg = m_proxyServiceConfig->value(INI_DAEMON_DEFAULT_EXE_KEY).toString();
QLOG_INFO() << QString(" One Pos(Backup Pos) After Modify --> Daemon DefaultExe::%1 ; Daemon Service List:: %2").arg(tempDefaultExeCfg).arg(tempProcessMapCfg);
} else {
QLOG_ERROR() << QString(" One Pos(Backup Pos) Mode , fmproxy_service.config No Writable !!!");
}
}
} else {
QLOG_INFO() << QString(" Not One Pos(Backup Pos) Mode, No Need Do Anthing");
m_proxyServiceConfig = new QSettings();
}
} }
ConfigManger::SqlConnectInfo ConfigManger::GetSqlConnectInfo() ConfigManger::SqlConnectInfo ConfigManger::GetSqlConnectInfo()
{ {
SqlConnectInfo info; SqlConnectInfo info;
...@@ -47,10 +104,12 @@ QString ConfigManger::GetLoginServerUrl() ...@@ -47,10 +104,12 @@ QString ConfigManger::GetLoginServerUrl()
{ {
return m_config->value(INI_LOGINSERVER).toString(); return m_config->value(INI_LOGINSERVER).toString();
} }
QString ConfigManger::GetOrderServerUrl() QString ConfigManger::GetOrderServerUrl()
{ {
return m_config->value(INI_ORDERSERVER).toString(); return m_config->value(INI_ORDERSERVER).toString();
} }
QString ConfigManger::GetStoreServerUrl() QString ConfigManger::GetStoreServerUrl()
{ {
return m_config->value(INI_STORESERVER).toString(); return m_config->value(INI_STORESERVER).toString();
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include <QSettings> #include <QSettings>
#include <QUrl> #include <QUrl>
#include <QPoint> #include <QPoint>
#include <QFileInfo>
#include "QsLog.h"
class ConfigManger class ConfigManger
{ {
...@@ -171,6 +173,7 @@ private: ...@@ -171,6 +173,7 @@ private:
// 程序配置和用户配置 // 程序配置和用户配置
QSettings *m_config; QSettings *m_config;
QSettings *m_userConfig; QSettings *m_userConfig;
QSettings *m_proxyServiceConfig;
}; };
#endif // CONFIGMANGER_H #endif // CONFIGMANGER_H
...@@ -67,6 +67,13 @@ public: ...@@ -67,6 +67,13 @@ public:
bool alterTablePrintSumBillPosDBLength(); bool alterTablePrintSumBillPosDBLength();
/** /**
*功能:新增pos本地数据库打印小票信息表中字段;
*参数:[无]
*返回:true:新增成功,false:新增字段失败
**/
bool alterTablePrintSumBillPosDB24();
/**
*功能:插入一条汇总单信息到pos本地数据库中; *功能:插入一条汇总单信息到pos本地数据库中;
*参数:[1]订单对象指针 [2]小票号 [3]Pos机实际开单时间 *参数:[1]订单对象指针 [2]小票号 [3]Pos机实际开单时间
*返回:true操作成功,false失败 *返回:true操作成功,false失败
......
#include "PosExtendObject.h"
#include "preDefine.h"
#include <QJsonArray>
PosExtendObject::PosExtendObject(const PosExtendObject &posExtendObj, QObject *parent):QObject(parent)
{
const QMetaObject *m = posExtendObj.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++) {
QMetaProperty qmp = m->property(i);
QString key = QString::fromLatin1(qmp.name());
QVariant value = posExtendObj.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
}
PosExtendObject& PosExtendObject::operator =(const PosExtendObject& posExtendObj)
{
const QMetaObject *m = posExtendObj.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++) {
QMetaProperty qmp = m->property(i);
QString key = QString::fromLatin1(qmp.name());
QVariant value = posExtendObj.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
return *this;
}
void PosExtendObject::FetchDataFromJson(const QJsonObject &json)
{
foreach(QString key, json.keys()) {
setProperty(key.toUtf8(), json[key].toVariant());
}
return;
}
QString PosExtendObject::objectToString(){
QString tempString;
tempString = "{\"printType\":\"" + printType + "\","
+ "\"qty\":" + QString::number( qty ) + ","
+ "\"printName\":\"" + printName + "\","
+ "\"printDesc\":\"" + printDesc + "\"}" ;
return tempString;
}
#ifndef POSEXTENDOBJECT_H
#define POSEXTENDOBJECT_H
#include <QObject>
#include <QJsonObject>
#include <QVariant>
#include <QMetaProperty>
class PosExtendObject : public QObject
{
Q_OBJECT
Q_PROPERTY (QString printType READ getPrintType WRITE setPrintType)
Q_PROPERTY (int qty READ getQty WRITE setQty)
Q_PROPERTY (QString printName READ getPrintName WRITE setPrintName)
Q_PROPERTY (QString printDesc READ getPrintDesc WRITE setPrintDesc)
public:
explicit PosExtendObject(QObject *parent = 0):QObject(parent){}
PosExtendObject(const PosExtendObject& posExtendObj,QObject* parent=0);
PosExtendObject& operator =(const PosExtendObject& posExtendObj);
void FetchDataFromJson(const QJsonObject &json);
QString objectToString();
QString printType;
int qty = 0;
QString printName;
QString printDesc;
protected:
inline QString getPrintType(){ return printType; }
inline void setPrintType(const QString& v){ printType = v; }
inline int getQty(){ return qty; }
inline void setQty(const int& v){ qty = v; }
inline QString getPrintName(){ return printName; }
inline void setPrintName(const QString& v){ printName = v; }
inline QString getPrintDesc(){ return printDesc; }
inline void setPrintDesc(const QString& v){ printDesc = v; }
};
#endif // POSEXTENDOBJECT_H
...@@ -16,6 +16,11 @@ OrderObject::OrderObject(const OrderObject &order, QObject *parent):QObject(pare ...@@ -16,6 +16,11 @@ OrderObject::OrderObject(const OrderObject &order, QObject *parent):QObject(pare
qDeleteAll(paymentList); qDeleteAll(paymentList);
paymentList.clear(); paymentList.clear();
/*
qDeleteAll(posExtendList);
posExtendList.clear();
*/
const QMetaObject *m = order.metaObject(); const QMetaObject *m = order.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++) for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{ {
...@@ -44,8 +49,17 @@ OrderObject::OrderObject(const OrderObject &order, QObject *parent):QObject(pare ...@@ -44,8 +49,17 @@ OrderObject::OrderObject(const OrderObject &order, QObject *parent):QObject(pare
PaymentObject *payment=new PaymentObject(*ptr,this); PaymentObject *payment=new PaymentObject(*ptr,this);
this->paymentList.append(payment); this->paymentList.append(payment);
} }
/*
foreach (auto ptr, order.posExtendList) {
PosExtendObject *posExtendObj=new PosExtendObject(*ptr,this);
this->posExtendList.append(posExtendObj);
}
*/
} }
OrderObject& OrderObject::operator =(const OrderObject& order) OrderObject& OrderObject::operator =(const OrderObject& order)
{ {
qDeleteAll(proList); qDeleteAll(proList);
...@@ -60,6 +74,11 @@ OrderObject& OrderObject::operator =(const OrderObject& order) ...@@ -60,6 +74,11 @@ OrderObject& OrderObject::operator =(const OrderObject& order)
qDeleteAll(paymentList); qDeleteAll(paymentList);
paymentList.clear(); paymentList.clear();
/*
qDeleteAll(posExtendList);
posExtendList.clear();
*/
const QMetaObject *m = order.metaObject(); const QMetaObject *m = order.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++) for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{ {
...@@ -89,9 +108,17 @@ OrderObject& OrderObject::operator =(const OrderObject& order) ...@@ -89,9 +108,17 @@ OrderObject& OrderObject::operator =(const OrderObject& order)
this->paymentList.append(payment); this->paymentList.append(payment);
} }
/*
foreach (auto ptr, order.posExtendList) {
PosExtendObject *posExtendObj=new PosExtendObject(*ptr,this);
this->posExtendList.append(posExtendObj);
}
*/
return *this; return *this;
} }
void OrderObject::FromJson(const QJsonObject &json) void OrderObject::FromJson(const QJsonObject &json)
{ {
qDeleteAll(proList); qDeleteAll(proList);
...@@ -106,6 +133,11 @@ void OrderObject::FromJson(const QJsonObject &json) ...@@ -106,6 +133,11 @@ void OrderObject::FromJson(const QJsonObject &json)
qDeleteAll(paymentList); qDeleteAll(paymentList);
paymentList.clear(); paymentList.clear();
/*
qDeleteAll(posExtendList);
posExtendList.clear();
*/
FetchDataFromJson(json); FetchDataFromJson(json);
QJsonArray products = json[JSON_PRODUCTS].toArray(); QJsonArray products = json[JSON_PRODUCTS].toArray();
...@@ -192,6 +224,28 @@ void OrderObject::FromJson(const QJsonObject &json) ...@@ -192,6 +224,28 @@ void OrderObject::FromJson(const QJsonObject &json)
paymentList.append(paymObject); paymentList.append(paymObject);
} }
/*
//解析多条POS扩展属性 List;
QJsonArray posExtends = json[JSON_POS_EXTEND_LIST].toArray();
foreach(QJsonValue posExtend, posExtends)
{
QJsonObject posExtendJson = posExtend.toObject();
PosExtendObject *posExtendObject = new PosExtendObject(this);
posExtendObject->qty = 0;
posExtendObject->FetchDataFromJson(posExtendJson);
posExtendList.append(posExtendObject);
}
*/
QJsonArray posExtends = json[JSON_POS_EXTEND_LIST].toArray();
if ( posExtends.isEmpty() ) {
posExtendListString = QString("");
} else {
QJsonDocument tempDoc( posExtends );
// 获取JSON文本表示形式的字符串
QByteArray tempByteArray = tempDoc.toJson(QJsonDocument::Compact);
posExtendListString = QString::fromUtf8( tempByteArray );
}
// 更新 QJsonObject Value; // 更新 QJsonObject Value;
if (json.contains(JSON_PUSH_PLUGIN_OPTIONS) ) { if (json.contains(JSON_PUSH_PLUGIN_OPTIONS) ) {
pluginOptions = json[JSON_PUSH_PLUGIN_OPTIONS].toObject(); pluginOptions = json[JSON_PUSH_PLUGIN_OPTIONS].toObject();
...@@ -241,6 +295,7 @@ void OrderObject::FromJson(const QJsonObject &json) ...@@ -241,6 +295,7 @@ void OrderObject::FromJson(const QJsonObject &json)
return; return;
} }
void OrderObject::FetchDataFromJson(const QJsonObject &json) void OrderObject::FetchDataFromJson(const QJsonObject &json)
{ {
QStringList keys = json.keys(); QStringList keys = json.keys();
......
...@@ -5,6 +5,9 @@ ...@@ -5,6 +5,9 @@
#include "Model/dishesObject.h" #include "Model/dishesObject.h"
#include "Model/couponsObject.h" #include "Model/couponsObject.h"
#include "Model/paymentObject.h" #include "Model/paymentObject.h"
#include "Model/PosExtendObject.h"
#include <QJsonArray>
#include <QJsonDocument>
class OrderObject : public QObject class OrderObject : public QObject
{ {
...@@ -15,7 +18,6 @@ class OrderObject : public QObject ...@@ -15,7 +18,6 @@ class OrderObject : public QObject
Q_PROPERTY (QString thirdPartyBatch READ getThirdPartyBatch WRITE setThirdPartyBatch) Q_PROPERTY (QString thirdPartyBatch READ getThirdPartyBatch WRITE setThirdPartyBatch)
Q_PROPERTY (QString refundFmId READ getRefundFmId WRITE setRefundFmId) Q_PROPERTY (QString refundFmId READ getRefundFmId WRITE setRefundFmId)
Q_PROPERTY (QString thirdPartyOrderId READ getThirdPartyOrderId WRITE setThirdPartyOrderId) Q_PROPERTY (QString thirdPartyOrderId READ getThirdPartyOrderId WRITE setThirdPartyOrderId)
Q_PROPERTY (int orderType READ getOrderType WRITE setOrderType) Q_PROPERTY (int orderType READ getOrderType WRITE setOrderType)
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)
...@@ -24,7 +26,6 @@ class OrderObject : public QObject ...@@ -24,7 +26,6 @@ class OrderObject : public QObject
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)
Q_PROPERTY (QString msr_no READ getMsr_no WRITE setMsr_no) Q_PROPERTY (QString msr_no READ getMsr_no WRITE setMsr_no)
Q_PROPERTY (QString storeId READ getStoreId WRITE setStoreId) Q_PROPERTY (QString storeId READ getStoreId WRITE setStoreId)
Q_PROPERTY (QString storeName READ getStoreName WRITE setStoreName) Q_PROPERTY (QString storeName READ getStoreName WRITE setStoreName)
...@@ -84,28 +85,21 @@ class OrderObject : public QObject ...@@ -84,28 +85,21 @@ class OrderObject : public QObject
Q_PROPERTY (QString customerSex READ getCustomerSex WRITE setCustomerSex) Q_PROPERTY (QString customerSex READ getCustomerSex WRITE setCustomerSex)
Q_PROPERTY (QString platformSource READ getPlatformSource WRITE setPlatformSource) Q_PROPERTY (QString platformSource READ getPlatformSource WRITE setPlatformSource)
Q_PROPERTY (int orderIndex READ getOrderIndex WRITE setOrderIndex) Q_PROPERTY (int orderIndex READ getOrderIndex WRITE setOrderIndex)
Q_PROPERTY (QString expectDate READ getExpectDate WRITE setExpectDate) Q_PROPERTY (QString expectDate READ getExpectDate WRITE setExpectDate)
Q_PROPERTY (QString lastExpectDate READ getLastExpectDate WRITE setLastExpectDate) Q_PROPERTY (QString lastExpectDate READ getLastExpectDate WRITE setLastExpectDate)
Q_PROPERTY (QString reserveMakeTime READ getReserveMakeTime WRITE setReserveMakeTime) Q_PROPERTY (QString reserveMakeTime READ getReserveMakeTime WRITE setReserveMakeTime)
Q_PROPERTY (int inAdvanceTakemeal READ getInAdvanceTakemeal WRITE setInAdvanceTakemeal) Q_PROPERTY (int inAdvanceTakemeal READ getInAdvanceTakemeal WRITE setInAdvanceTakemeal)
Q_PROPERTY (QString subStoreId READ getSubStoreId WRITE setSubStoreId) Q_PROPERTY (QString subStoreId READ getSubStoreId WRITE setSubStoreId)
Q_PROPERTY (int tenderDeliveryDiscountB READ getTenderDeliveryDiscountB WRITE setTenderDeliveryDiscountB) Q_PROPERTY (int tenderDeliveryDiscountB READ getTenderDeliveryDiscountB WRITE setTenderDeliveryDiscountB)
Q_PROPERTY (QString tenderDeliveryDiscountBSku READ getTenderDeliveryDiscountBSku WRITE setTenderDeliveryDiscountBSku) Q_PROPERTY (QString tenderDeliveryDiscountBSku READ getTenderDeliveryDiscountBSku WRITE setTenderDeliveryDiscountBSku)
Q_PROPERTY (int decouplePosVersion READ getDecouplePosVersion WRITE setDecouplePosVersion) Q_PROPERTY (int decouplePosVersion READ getDecouplePosVersion WRITE setDecouplePosVersion)
Q_PROPERTY (bool deliveryAtProd READ getDeliveryAtProd WRITE setDeliveryAtProd) Q_PROPERTY (bool deliveryAtProd READ getDeliveryAtProd WRITE setDeliveryAtProd)
Q_PROPERTY (int globalServiceType READ getGlobalServiceType WRITE setGlobalServiceType) Q_PROPERTY (int globalServiceType READ getGlobalServiceType WRITE setGlobalServiceType)
Q_PROPERTY (int globalOrderType READ getGlobalOrderType WRITE setGlobalOrderType) Q_PROPERTY (int globalOrderType READ getGlobalOrderType WRITE setGlobalOrderType)
Q_PROPERTY (int extendType READ getExtendType WRITE setExtendType) Q_PROPERTY (int extendType READ getExtendType WRITE setExtendType)
Q_PROPERTY (int deliveryProvider READ getDeliveryProvider WRITE setDeliveryProvider) Q_PROPERTY (int deliveryProvider READ getDeliveryProvider WRITE setDeliveryProvider)
Q_PROPERTY (int deliveryType READ getDeliveryType WRITE setDeliveryType) Q_PROPERTY (int deliveryType READ getDeliveryType WRITE setDeliveryType)
Q_PROPERTY (int isGiftitForward READ getIsGiftitForward WRITE setIsGiftitForward ) Q_PROPERTY (int isGiftitForward READ getIsGiftitForward WRITE setIsGiftitForward )
Q_PROPERTY (QString remindTicketTime READ getRemindTicketTime WRITE setRemindTicketTime ) Q_PROPERTY (QString remindTicketTime READ getRemindTicketTime WRITE setRemindTicketTime )
Q_PROPERTY (QString carNumber READ getCarNumber WRITE setCarNumber) Q_PROPERTY (QString carNumber READ getCarNumber WRITE setCarNumber)
Q_PROPERTY (QString carColor READ getCarColor WRITE setCarColor) Q_PROPERTY (QString carColor READ getCarColor WRITE setCarColor)
...@@ -117,8 +111,8 @@ class OrderObject : public QObject ...@@ -117,8 +111,8 @@ class OrderObject : public QObject
Q_PROPERTY (int totalPriceForPos READ getTotalPriceForPos WRITE setTotalPriceForPos ) Q_PROPERTY (int totalPriceForPos READ getTotalPriceForPos WRITE setTotalPriceForPos )
Q_PROPERTY (int blockPrintCupTicketTask READ getBlockPrintCupTicketTask WRITE setBlockPrintCupTicketTasks ) Q_PROPERTY (int blockPrintCupTicketTask READ getBlockPrintCupTicketTask WRITE setBlockPrintCupTicketTasks )
Q_PROPERTY (int blockPrintRemindTicketTask READ getBlockPrintRemindTicketTask WRITE setBlockPrintRemindTicketTask ) Q_PROPERTY (int blockPrintRemindTicketTask READ getBlockPrintRemindTicketTask WRITE setBlockPrintRemindTicketTask )
Q_PROPERTY (bool packageFeeAtProduct READ getPackageFeeAtProduct WRITE setPackageFeeAtProduct) Q_PROPERTY (bool packageFeeAtProduct READ getPackageFeeAtProduct WRITE setPackageFeeAtProduct)
Q_PROPERTY (QString memberLevel READ getMemberLevel WRITE setMemberLevel)
public: public:
OrderObject(QObject *parent=0) OrderObject(QObject *parent=0)
...@@ -170,6 +164,15 @@ public: ...@@ -170,6 +164,15 @@ public:
//扩展 星巴克 组合支付的券信息 List; //扩展 星巴克 组合支付的券信息 List;
QList<CouponsObject*>orderCoupList; QList<CouponsObject*>orderCoupList;
// 扩展 星巴克 多条 POS打印扩展属性List;
// POS/PCS 扩展列表: 优先打印,店用餐具,一次性杯,自带杯
// {printType->string,qty->int,printName->string,printDesc->string}
// printType: 打印类型 1001:优先制作 1101:店用餐具 1102:一次性杯 1103:自带杯
// qty: 数量(自带杯)
// printName: 打印名称
// printDesc: 打印描述
// QList<PosExtendObject*>posExtendList; //不可动态新增字段,在PosExtendObject转序列化时会丢失新增字段; 顾放弃此模式;
//扩展 存储订单全部 Poskey List (用于做PosKey有效期检查); //扩展 存储订单全部 Poskey List (用于做PosKey有效期检查);
QStringList posKeyList; QStringList posKeyList;
...@@ -279,7 +282,6 @@ public: ...@@ -279,7 +282,6 @@ public:
int blockPrintCupTicketTask = 0; int blockPrintCupTicketTask = 0;
// block按时打印送餐提醒小票 0:不block; 1:block [reserve27] 对应OMS接口:remindTicketFlag 是否打印送餐小票 0 打印 1 不打印 // block按时打印送餐提醒小票 0:不block; 1:block [reserve27] 对应OMS接口:remindTicketFlag 是否打印送餐小票 0 打印 1 不打印
int blockPrintRemindTicketTask = 0; int blockPrintRemindTicketTask = 0;
int forwardPosStatus; // 正向单入机状态: 0:未知 1: 成功 2:失败; int forwardPosStatus; // 正向单入机状态: 0:未知 1: 成功 2:失败;
int negativePosStatus; // 负向单同上; int negativePosStatus; // 负向单同上;
int deliveryStatus; int deliveryStatus;
...@@ -307,6 +309,15 @@ public: ...@@ -307,6 +309,15 @@ public:
QString sbkAppRefundPayValue; QString sbkAppRefundPayValue;
bool backupPosFlag; bool backupPosFlag;
int totalPriceForPos; int totalPriceForPos;
QString memberLevel; // 会员等级: 黑金-Black、金星-Gold、玉星-Green、银星-Welcome;
QString posExtendListString;
// 扩展 星巴克 多条 POS打印扩展属性List;
// POS/PCS 扩展列表: 优先打印,店用餐具,一次性杯,自带杯
// {printType->string,qty->int,printName->string,printDesc->string}
// printType: 打印类型 1001:优先制作 1101:店用餐具 1102:一次性杯 1103:自带杯
// qty: 数量(自带杯)
// printName: 打印名称
// printDesc: 打印描述
QString getChannelName(); QString getChannelName();
...@@ -609,6 +620,9 @@ public: ...@@ -609,6 +620,9 @@ public:
inline int getBlockPrintRemindTicketTask()const{return blockPrintRemindTicketTask;} inline int getBlockPrintRemindTicketTask()const{return blockPrintRemindTicketTask;}
inline void setBlockPrintRemindTicketTask(const int& v){blockPrintRemindTicketTask = v;} inline void setBlockPrintRemindTicketTask(const int& v){blockPrintRemindTicketTask = v;}
inline QString getMemberLevel()const{return memberLevel;}
inline void setMemberLevel(const QString& v){memberLevel = v;}
}; };
#endif // ORDEROBJECT_H #endif // ORDEROBJECT_H
...@@ -16,70 +16,77 @@ class MacTool ...@@ -16,70 +16,77 @@ class MacTool
{ {
public: public:
static int GetMacByAdaptersAddresses(std::string& macOut) static int GetMacByAdaptersAddresses(std::string& macOut, std::string& ipOut)
{ {
int ret = 0; int ret = 0;
/* QString macAddress ="";
ULONG outBufLen = sizeof(IP_ADAPTER_ADDRESSES); QStringList macAddressList;
PIP_ADAPTER_ADDRESSES pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen); QString ipAddress ="";
if (pAddresses == NULL) QStringList ipAddressList;
return 0; auto interfaces = QNetworkInterface::allInterfaces();
auto hostAddresses = QNetworkInterface::allAddresses();
// Make an initial call to GetAdaptersAddresses to get the necessary size into the ulOutBufLen variable // 在线网卡可能存在多个,故还是需要像 upp 一样,将在线全部网卡进行排序后,取第一个
if(GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW) QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: interfaces size: %1 , hostAddresses: %2 ").arg( interfaces.size() ).arg( hostAddresses.size() );
for (int i = 0; i < interfaces.length(); i++) {
if ( interfaces[i].isValid() ) {
if( interfaces[i].flags().testFlag(QNetworkInterface::IsUp) && interfaces[i].flags().testFlag(QNetworkInterface::IsRunning) &&
!interfaces[i].flags().testFlag(QNetworkInterface::IsLoopBack))
{ {
free(pAddresses); QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: interfaces[ %1 ] = %2").arg( i+1 ).arg( interfaces[i].hardwareAddress() );
pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen); macAddressList.append( interfaces[i].hardwareAddress() );
if (pAddresses == NULL)
return 0;
} }
if(GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == NO_ERROR)
{
for(PIP_ADAPTER_ADDRESSES pCurrAddresses = pAddresses; pCurrAddresses != NULL; pCurrAddresses = pCurrAddresses->Next)
{
if(pCurrAddresses->PhysicalAddressLength != 6)
continue;
char acMAC[32];
sprintf(acMAC, "%02X-%02X-%02X-%02X-%02X-%02X",
int (pCurrAddresses->PhysicalAddress[0]),
int (pCurrAddresses->PhysicalAddress[1]),
int (pCurrAddresses->PhysicalAddress[2]),
int (pCurrAddresses->PhysicalAddress[3]),
int (pCurrAddresses->PhysicalAddress[4]),
int (pCurrAddresses->PhysicalAddress[5]));
macOut = acMAC;
ret = 1;
break;
} }
} }
free(pAddresses); // MAC地址列表大于1时(需要进行升序排序);
return ret; if ( macAddressList.size() > 1 ) {
*/ qSort(macAddressList.begin(), macAddressList.end(), [] (const QString& s1, const QString& s2) {
return s1 < s2;
} );
macAddress = macAddressList.first();
// MAC地址列表等于1时(无需排序,直接取唯一的值)
} else if ( macAddressList.size() == 1 ) {
macAddress = macAddressList.first();
} else {
// Do Nothing;
}
QString address =""; // ip 地址可能存在多个,故还是需要像 upp 一样,将全部 ip 地址进行排序后,取第一个
auto interfaces = QNetworkInterface::allInterfaces(); for (int i = 0; i < hostAddresses.length(); i++) {
for (int i = 0; i < interfaces.length(); i++) { // if(address.protocol() == QAbstractSocket::IPv4Protocol) { } //1.1.1.1 > length > 7
QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: interfaces[%1]= %2 ").arg( i+1 ).arg( interfaces[i].hardwareAddress() ); QHostAddress hadr = hostAddresses[i];
if ( interfaces[i].isValid() ) { if ( hadr.toString().length() > 7 && !hadr.toString().contains("127.0.0.1") && !hadr.toString().contains("192.168.")
/* if( interfaces[i].flags().testFlag(QNetworkInterface::IsUp) && && !hadr.toString().contains("10.0.75.1") && !hadr.toString().contains("172.") && hadr.toString().contains("10.") )
interfaces[i].flags().testFlag(QNetworkInterface::IsRunning) && {
!interfaces[i].flags().testFlag(QNetworkInterface::IsLoopBack)) */ QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: hostAddresses[ %1 ] = %2 , protocol: %3")
address = interfaces[i].hardwareAddress(); .arg( i+1 ).arg( hadr.toString() ).arg( hadr.protocol() );
break; ipAddressList.append( hadr.toString() );
}
} }
// IP地址列表大于1时(需要进行升序排序);
if ( ipAddressList.size() > 1 ) {
qSort(ipAddressList.begin(), ipAddressList.end(), [] (const QString& s1, const QString& s2) {
return s1 < s2;
} );
ipAddress = ipAddressList.first();
// MAC地址列表等于1时(无需排序,直接取唯一的值)
} else if ( ipAddressList.size() == 1 ) {
ipAddress = ipAddressList.first();
} else {
// Do Nothing;
} }
if (address.isEmpty()) { if ( macAddress.isEmpty() || ipAddress.isEmpty() ) {
QLOG_ERROR()<<QString("GetMacByAdaptersAddresses:: Local Hardware Address Acquisition Failed!"); QLOG_ERROR()<<QString("GetMacByAdaptersAddresses:: Local Hardware Address Acquisition Failed || Local IP Address Failed");
} else { } else {
ret = 1; ret = 1;
address = address.replace(QRegExp(":"), "-"); macAddress = macAddress.replace(QRegExp(":"), "-");
macOut = address.toStdString(); macOut = macAddress.toStdString();
QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: MAC= %1 ").arg( address ); ipOut = ipAddress.toStdString();
QLOG_INFO()<<QString("GetMacByAdaptersAddresses::MAC: %1 , IP: %2").arg( macAddress ).arg(ipAddress);
} }
return ret; return ret;
} }
}; };
......
...@@ -86,7 +86,8 @@ SOURCES += main.cpp\ ...@@ -86,7 +86,8 @@ SOURCES += main.cpp\
PrintTicketSelectForm.cpp \ PrintTicketSelectForm.cpp \
Model/PosMateDataObject.cpp \ Model/PosMateDataObject.cpp \
DTools/PosMetaDataDB.cpp \ DTools/PosMetaDataDB.cpp \
MiniStoreStatusForm.cpp MiniStoreStatusForm.cpp \
Model/PosExtendObject.cpp
HEADERS += \ HEADERS += \
Control/flowControl.h \ Control/flowControl.h \
...@@ -154,7 +155,8 @@ HEADERS += \ ...@@ -154,7 +155,8 @@ HEADERS += \
PrintTicketSelectForm.h \ PrintTicketSelectForm.h \
Model/PosMateDataObject.h \ Model/PosMateDataObject.h \
DTools/PosMetaDataDB.h \ DTools/PosMetaDataDB.h \
MiniStoreStatusForm.h MiniStoreStatusForm.h \
Model/PosExtendObject.h
FORMS += mainForm.ui \ FORMS += mainForm.ui \
alertForm.ui \ alertForm.ui \
......
...@@ -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 2,2023,10,12 FILEVERSION 2,2024,1,31
PRODUCTVERSION 2,2023,10,12 PRODUCTVERSION 2,2024,1,31
//*************************************************************************// //*************************************************************************//
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", "Delivery Order Plugin Application" VALUE "FileDescription", "Delivery Order Plugin Application"
VALUE "InternalName", "fmTakeout.exe" VALUE "InternalName", "fmTakeout.exe"
VALUE "LegalCopyright", "Copyright (C)2014-2023" VALUE "LegalCopyright", "Copyright (C)2014-2024"
VALUE "OriginalFilename", "fmTakeout.exe" VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plugin" VALUE "ProductName", "Delivery Order Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***// //***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2023.10.12" VALUE "ProductVersion", "2.2024.1.31"
VALUE "FileVersion", "2.2023.10.12" VALUE "FileVersion", "2.2024.1.31"
//*************************************************************************// //*************************************************************************//
END END
END END
......
...@@ -81,31 +81,6 @@ void CopyOriginConfigResetSelf(const QString& g_appDir){ ...@@ -81,31 +81,6 @@ void CopyOriginConfigResetSelf(const QString& g_appDir){
} }
// One Pos 守护程序: 守护插件的路径的修改;【启动项路径有待测试】
void ModifyDaemonExeConfigPath(){
// 等待下一个版本测试,再进行修改 守护程序路径;
// C:\Freemud\daemonService\fmproxy_service.config
/*
[FMKeeper]
Heartbeat={"fm_cmd":4}
HeartbeatPeer=24409
ServiceName=PosPluginDaemon
HeartbeatTryCnt=5
CheckInterval=180
PersistLaunch=0
KillElapse=0
DefaultExe=C:\\freemud\\fmPlugin\\fmTakeout.exe //<<---------------------//
ServiceStartMode=2
ServiceStartDelayInterval=330
DaemonMultiProcessMode=1
MultiProcessPortExeMap=24409@C:\\freemud\\fmPlugin\\fmTakeout.exe;8080@C:\\Micros\\Simphony\\WebServer\\ServiceHost.exe //<<---------------------//
ExtraDaemonServiceNameList=SbuxCapsServices;
*/
QLOG_INFO() << QString(" Wait Next Version , Change fmproxy_service.config File'DefaultExe And MultiProcessPortExeMap !!!");
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
...@@ -142,7 +117,6 @@ int main(int argc, char *argv[]) ...@@ -142,7 +117,6 @@ int main(int argc, char *argv[])
// 兼容之前老版本(Qt5.5 & VS2010)的配置文件 与 守护程序的配置文件: // 兼容之前老版本(Qt5.5 & VS2010)的配置文件 与 守护程序的配置文件:
CopyOriginConfigResetSelf(g_appDir); CopyOriginConfigResetSelf(g_appDir);
ModifyDaemonExeConfigPath();
// 将控制器移到工作线程 // 将控制器移到工作线程
FlowControl::GetInstance().moveToThread(&workThread); FlowControl::GetInstance().moveToThread(&workThread);
......
...@@ -53,6 +53,7 @@ MainForm::MainForm(QWidget *parent) : ...@@ -53,6 +53,7 @@ MainForm::MainForm(QWidget *parent) :
connect(&FlowControl::GetInstance(), &FlowControl::setOpeStatus, this, &MainForm::onSetOpeStatus); connect(&FlowControl::GetInstance(), &FlowControl::setOpeStatus, this, &MainForm::onSetOpeStatus);
connect(&FlowControl::GetInstance(), &FlowControl::setNetStatus, this, &MainForm::onSetNetStatus); connect(&FlowControl::GetInstance(), &FlowControl::setNetStatus, this, &MainForm::onSetNetStatus);
connect(&FlowControl::GetInstance(), &FlowControl::setStoreInfo, this, &MainForm::onSetStoreInfo); connect(&FlowControl::GetInstance(), &FlowControl::setStoreInfo, this, &MainForm::onSetStoreInfo);
connect(&FlowControl::GetInstance(), &FlowControl::setTerminalIp, this, &MainForm::onSetTerminalIp);
connect(&FlowControl::GetInstance(), &FlowControl::setCashierInfo, this, &MainForm::onSetCashierInfo); connect(&FlowControl::GetInstance(), &FlowControl::setCashierInfo, this, &MainForm::onSetCashierInfo);
connect(&FlowControl::GetInstance(), &FlowControl::changeOrderStatus, this, &MainForm::onChangeOrderStatus/*,Qt::BlockingQueuedConnection*/); connect(&FlowControl::GetInstance(), &FlowControl::changeOrderStatus, this, &MainForm::onChangeOrderStatus/*,Qt::BlockingQueuedConnection*/);
connect(&FlowControl::GetInstance(), &FlowControl::showOrderDetails, this, &MainForm::onShowOrderDetails); connect(&FlowControl::GetInstance(), &FlowControl::showOrderDetails, this, &MainForm::onShowOrderDetails);
...@@ -187,6 +188,7 @@ void MainForm::_Init() ...@@ -187,6 +188,7 @@ void MainForm::_Init()
// 初始化文字 // 初始化文字
ui->mainLabStoreid->setText(QString::fromLocal8Bit(UI_STOREID)); ui->mainLabStoreid->setText(QString::fromLocal8Bit(UI_STOREID));
ui->mainLabVersion->setText(APP_VERSION); ui->mainLabVersion->setText(APP_VERSION);
ui->mainSlabIp->setText(TERMINAL_DEF_IP);
// 初始化表 // 初始化表
int scales6[] = {3, 4, 2, 3, 3, 3}; int scales6[] = {3, 4, 2, 3, 3, 3};
...@@ -468,6 +470,12 @@ void MainForm::onSetCashierInfo(const QString &cashierInfo) ...@@ -468,6 +470,12 @@ void MainForm::onSetCashierInfo(const QString &cashierInfo)
} }
void MainForm::onSetTerminalIp(const QString &terminalIp)
{
ui->mainSlabIp->setText(terminalIp);
}
void MainForm::onSetOpeStatus(const QString &status) void MainForm::onSetOpeStatus(const QString &status)
{ {
ui->mainLabOpeStatus->setText(status); ui->mainLabOpeStatus->setText(status);
......
...@@ -331,6 +331,13 @@ public slots: ...@@ -331,6 +331,13 @@ public slots:
* */ * */
void onSetStoreInfo(const QString& storeId); void onSetStoreInfo(const QString& storeId);
/* 功能:设置设备ip信息
* 参数:[1]设备ip信息
* 返回:NULL
* */
void onSetTerminalIp(const QString& terminalIp);
/* 功能:设置收银员信息 /* 功能:设置收银员信息
* 参数:[1]收银员编号 * 参数:[1]收银员编号
* 返回:NULL * 返回:NULL
......
...@@ -1181,7 +1181,7 @@ ...@@ -1181,7 +1181,7 @@
<property name="frameShadow"> <property name="frameShadow">
<enum>QFrame::Raised</enum> <enum>QFrame::Raised</enum>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_8" stretch="0,0,1"> <layout class="QHBoxLayout" name="horizontalLayout_8" stretch="0,0,0">
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
</property> </property>
...@@ -1360,6 +1360,17 @@ ...@@ -1360,6 +1360,17 @@
</layout> </layout>
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_19">
<item>
<widget class="QLabel" name="mainSlabIp">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5"> <layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing"> <property name="spacing">
<number>10</number> <number>10</number>
......
...@@ -51,10 +51,11 @@ ...@@ -51,10 +51,11 @@
//#define APP_VERSION "2.2023.6.29" //#define APP_VERSION "2.2023.6.29"
//#define APP_VERSION "2.2023.7.24" //#define APP_VERSION "2.2023.7.24"
// Qt 5.9.1 & VS2015 [2023-09-13] 开始启用新的大版本; // Qt 5.9.1 & VS2015 [2023-09-13] 开始启用新的大版本;
#define APP_VERSION "2.2023.10.12" #define APP_VERSION "2.2024.1.31"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号 //修正版本号时,切记修正 FmTakeout.rc 中的版本号
#define SERVER_PASSWORD "posoperator@freemud.cn" #define SERVER_PASSWORD "posoperator@freemud.cn"
#define TERMINAL_DEF_IP "*.*.*.*"
#define CONFIG_NAME "config.ini" #define CONFIG_NAME "config.ini"
#define USERCONFIG_NAME "userConfig.ini" #define USERCONFIG_NAME "userConfig.ini"
...@@ -70,6 +71,11 @@ ...@@ -70,6 +71,11 @@
#define INI_LOGINSERVER "FmServer/loginUrl" #define INI_LOGINSERVER "FmServer/loginUrl"
#define INI_ORDERSERVER "FmServer/orderUrl" #define INI_ORDERSERVER "FmServer/orderUrl"
#define INI_STORESERVER "FmServer/storeUrl" #define INI_STORESERVER "FmServer/storeUrl"
#define INI_DAEMON_PROCESS_MAP_KEY "FMKeeper/MultiProcessPortExeMap"
#define INI_DAEMON_PROCESS_MAP_VALUE "24409@C:\\freemud\\fmPluginNew\\fmTakeout.exe"
#define INI_DAEMON_DEFAULT_EXE_KEY "FMKeeper/DefaultExe"
#define INI_DAEMON_DEFAULT_EXE_VALUE "C:\\freemud\\fmPluginNew\\fmTakeout.exe"
#define INI_PRINTERNAME "Printer/name" #define INI_PRINTERNAME "Printer/name"
#define INI_OMSBTNPOSTION "OmsBtn/postion" #define INI_OMSBTNPOSTION "OmsBtn/postion"
#define INI_OMSBTNWIDTHOFFSET "OmsBtn/widthoffset" #define INI_OMSBTNWIDTHOFFSET "OmsBtn/widthoffset"
...@@ -159,6 +165,7 @@ ...@@ -159,6 +165,7 @@
#define JSON_COUPONS "coupons" #define JSON_COUPONS "coupons"
#define JSON_EXCHANGECOUPONS "exchangeCoupons" #define JSON_EXCHANGECOUPONS "exchangeCoupons"
#define JSON_PAYMENTS "PaymentObjs" #define JSON_PAYMENTS "PaymentObjs"
#define JSON_POS_EXTEND_LIST "posExtendList"
#define JSON_SUBPRODUCTS "addExtra" #define JSON_SUBPRODUCTS "addExtra"
#define JSON_ITEMSDISCOUNT "itemsDiscount" #define JSON_ITEMSDISCOUNT "itemsDiscount"
#define JSON_COUPONPRODUCTS "skus" #define JSON_COUPONPRODUCTS "skus"
...@@ -238,6 +245,9 @@ ...@@ -238,6 +245,9 @@
#define SOCKET_CONNECT_TIMEOUT_INTERVAL 20*1000 #define SOCKET_CONNECT_TIMEOUT_INTERVAL 20*1000
// 写报文超时时间(单位: 毫秒); // 写报文超时时间(单位: 毫秒);
#define SOCKET_WRITE_TIMEOUT_INTERVAL 15*1000 #define SOCKET_WRITE_TIMEOUT_INTERVAL 15*1000
// 启动检查超时时间(单位: 毫秒);
#define SOCKET_START_CHECK_TIMEOUT_INTERVAL 5*1000
// 启动超时时间(单位: 毫秒); // 启动超时时间(单位: 毫秒);
#define SOCKET_START_TIMEOUT_INTERVAL 1*10*1000 #define SOCKET_START_TIMEOUT_INTERVAL 1*10*1000
// 短超时时间(单位: 毫秒); // 短超时时间(单位: 毫秒);
......
...@@ -81,7 +81,7 @@ QWidget ...@@ -81,7 +81,7 @@ QWidget
background-color: #303030; background-color: #303030;
} }
#mainSlabStoreid,#mainSlabOpeStatus,#mainSlabNetStatus,#mainSlabVersion,#mainSlabCashier, #mainSlabStoreid,#mainSlabOpeStatus,#mainSlabNetStatus,#mainSlabVersion,#mainSlabCashier,
#mainSlabTime,#mainLabStoreid,#mainLabOpeStatus,#mainLabNetStatus,#mainLabVersion,#mainLabCashier #mainSlabTime,#mainLabStoreid,#mainLabOpeStatus,#mainLabNetStatus,#mainLabVersion,#mainLabCashier,#mainSlabIp
{ {
color: #9b9b9b; color: #9b9b9b;
} }
......
No preview for this file type
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