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()
while(!_stoped) {
QLOG_INFO() << QString("SocketCommunicate:: ~SocketCommunicate()......");
_stopFlag = true;
if ( _sslSocket ) {
_sslSocket->disconnectFromHost(); // free Host And Port Resource;
// 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()
// delete _sslSocket; _sslSocket = nullptr;
}
emit quit();
EVENTWAIT(20);
this->threadClose();
......@@ -100,13 +98,15 @@ bool SocketCommunicate::connectTcpSvr()
//下载证书接口(需要门店号 & 设备号)待调试, 评估是否需要保存证书文件:
QLOG_INFO() << "connectTcpSvr::Get Certificate From Url: ......................";
std::string tempMacAddress = "";
int getMacRet = MacTool::GetMacByAdaptersAddresses( tempMacAddress );
std::string tempIpAddress = "";
int getMacRet = MacTool::GetMacByAdaptersAddresses( tempMacAddress , tempIpAddress );
if ( !getMacRet) {
QLOG_ERROR() << "connectTcpSvr:: MacTool::GetMacByAdaptersAddresses Falied";
// 是否需要弹框提示 伙伴.
}
_macAddress = tempMacAddress.c_str();
_localIp = tempIpAddress.c_str();
// 组装请求头+请求体, 获取证书相关数据;
QString reqCertificateRealUrl = _getCertificateUrl + "storeId=" + _storeId + "&deviceId=" + _macAddress;
......@@ -115,7 +115,7 @@ bool SocketCommunicate::connectTcpSvr()
QString requestError;
int requestErrorNum = 0;
// 如果获取证书失败,需要循环获取,且频次需要越来越低;
if ( 0 == _certPublishKey.length() || 0 == _certPrivateKey.length() ) {
if ( 0 == _certPublishKey.length() || 0 == _certPrivateKey.length() || _reconnectTimes >= 5 ) {
do {
if ( S_GetRequest( reqCertificateRealUrl, outCertificateData, requestError) ) {
......@@ -799,7 +799,7 @@ void SocketCommunicate::threadStart()
}
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);
Sleep( SOCKET_START_TIMEOUT_INTERVAL );
Sleep( SOCKET_START_CHECK_TIMEOUT_INTERVAL );
FlowControl::GetInstance()._GetFcMajorInfo(_httpLoginResult, _openTcpChannel, _storeId, _localIp, _hostName,_workStationNum,_backupPos);
}
......
......@@ -45,6 +45,7 @@ FlowControl::~FlowControl()
m_reportOMSReocrdOrderTimer->deleteLater();
m_presistInputPosSuccessReocrdTimer->deleteLater();
m_loginTimer->deleteLater();
m_loopRefreshTimer->deleteLater();
m_queryAllNoticeTimer->deleteLater();
m_storageOrderTimer->deleteLater();
m_delayGetRefundDetailTimer->deleteLater();
......@@ -67,7 +68,6 @@ FlowControl::FlowControl()
m_bFloatFromLockSt = false;
m_initSimProcOrderDBRet = false;
m_initPrintSumBillPosDBRet = false;
m_initGetAuthPosDBRet = false;
m_initPrintCupStickPosDBRet = false;
m_initPrintMsgQueueDBRet = false;
m_initPrintOrderPromotionDBRet = false;
......@@ -106,6 +106,7 @@ FlowControl::FlowControl()
m_reportOMSReocrdOrderTimer = new QTimer(this);
m_presistInputPosSuccessReocrdTimer = new QTimer(this);
m_loginTimer=new QTimer(this);
m_loopRefreshTimer=new QTimer(this);
m_queryAllNoticeTimer = new QTimer(this);
m_storageOrderTimer = new QTimer(this);
m_delayGetRefundDetailTimer = new QTimer(this);
......@@ -115,6 +116,7 @@ FlowControl::FlowControl()
qRegisterMetaType<AlertForm::Type>("AlertForm::Type");
connect(m_loginTimer,&QTimer::timeout,this,&FlowControl::_ClickToLogin);
connect(m_loopRefreshTimer,&QTimer::timeout,this,&FlowControl::_LoopRefresh);
connect(m_queryAllNoticeTimer,&QTimer::timeout,this,&FlowControl::_QueryAllNoticeMsg);
connect(m_blockInputPosWarnningTimer,&QTimer::timeout,this,&FlowControl::_BlockInputPosWarnning);
connect(m_storageOrderTimer,&QTimer::timeout,this,&FlowControl::_StoragePosOrderData);
......@@ -156,10 +158,6 @@ FlowControl::FlowControl()
PrintOrderPromotionDB::getInstance();
m_initPrintOrderPromotionDBRet = PrintOrderPromotionDB::getInstance().initPrintOrderPromotionDB();
// 打开SqlServer POS获取 当前用户 是否绑定钱箱+是否拥有退货权限 本地数据库 //
GetCaboxAReAuth::getInstance();
m_initGetAuthPosDBRet = GetCaboxAReAuth::getInstance().initGetAuthPosDB();
// 打开SqlServer 用订单的全部去重Poskey校验 在POS本地数据库的有效性 //
CheckPoskeyExistPosDB::getInstance();
m_initCheckPoskeyExistPosDBRet = CheckPoskeyExistPosDB::getInstance().initCheckPoskeyExistPosDB();
......@@ -177,10 +175,10 @@ FlowControl::FlowControl()
connect(&PrintCupStickPosDB::getInstance(), &PrintCupStickPosDB::triggerFlowContrlAlert, this, &FlowControl::onTriggerFlowContrlAlert);
}
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::FlowControl() m_initSimProcOrderDBRet: %1, m_initPrintSumBillPosDBRet: %2, m_initGetAuthPosDBRet:%3 ,"
"m_initPrintCupStickPosDBRet:%4, m_initPrintMsgQueueDBRet:%5, m_initPrintOrderPromotionDBRet:%6, m_initCheckPoskeyExistPosDBRet:%7, "
"m_initSaveNoticeMsgDBRet:%8, m_initPosMetaDataDBRet:%9 --->>>>]")
.arg( m_initSimProcOrderDBRet?1:0).arg( m_initPrintSumBillPosDBRet?1:0).arg( m_initGetAuthPosDBRet?1:0)
QLOG_INFO()<<QString("[<<<<---FlowControl::FlowControl() m_initSimProcOrderDBRet: %1, m_initPrintSumBillPosDBRet: %2,"
"m_initPrintCupStickPosDBRet:%3, m_initPrintMsgQueueDBRet:%4, m_initPrintOrderPromotionDBRet:%5, m_initCheckPoskeyExistPosDBRet:%6, "
"m_initSaveNoticeMsgDBRet:%7, m_initPosMetaDataDBRet:%8 --->>>>]")
.arg( m_initSimProcOrderDBRet?1:0).arg( m_initPrintSumBillPosDBRet?1:0)
.arg(m_initPrintCupStickPosDBRet?1:0).arg(m_initPrintMsgQueueDBRet?1:0).arg(m_initPrintOrderPromotionDBRet?1:0)
.arg(m_initCheckPoskeyExistPosDBRet?1:0).arg(m_initSaveNoticeMsgDBRet?1:0).arg(m_initPosMetaDataDBRet?1:0);
......@@ -192,46 +190,33 @@ FlowControl::FlowControl()
_ClickOMSAssignArea();
m_loginTimer->start(10*1000);
m_loopRefreshTimer->start(5*1000); // 5s 定期循环刷新: 1、补偿开机启动插件就运行连接数据库失败后重连操作;
}
void FlowControl::_GetIpAddress()
{
/***已经验证:IP地址 优先取配置文件中的[IpAddress/ip];只有没有配置的情况才会根据主机名获取ipv4的IP地址,因此为保证IP的准确性,注释通过配置文件获取ip的代码***/
std::string tempMacAddress = "";
int getMacRet = MacTool::GetMacByAdaptersAddresses( tempMacAddress );
std::string macAddress = "";
std::string ipAddress = "";
int getMacRet = MacTool::GetMacByAdaptersAddresses( macAddress , ipAddress);
if ( !getMacRet) {
QLOG_ERROR() << "FlowControl::_GetIpAddress MacTool->GetMacByAdaptersAddresses Falied";
}
m_posMacAddress = tempMacAddress.c_str();
m_posMacAddress = macAddress.c_str();
m_ipAddress = ipAddress.c_str();
QString ipAddress;
QHostInfo info = QHostInfo::fromName(QHostInfo::localHostName());
m_posHostName = info.hostName();
QLOG_INFO()<<QString("[<<<<---FlowControl::_GetIpAddress HostName:%1--->>>>]").arg(m_posHostName);
// CNSHBK01S00000(国家+城市+BK01+S+5位店号)其中的BK01代表PC
// m_posHostName..contains("BK01",Qt::CaseInsensitive)
if ( m_posHostName.indexOf("BK01",Qt::CaseInsensitive) > 2 ) {
m_backupPosFlag = true;
}
foreach(QHostAddress address,info.addresses()) {
if(address.protocol() == QAbstractSocket::IPv4Protocol) {
QLOG_INFO()<<QString("[<<<<---FlowControl::_GetIpAddress IP:%1--->>>>]").arg(address.toString());
//1.1.1.1 > length > 7
if(address.toString().length()>7 && address.toString()!= "127.0.0.1" ) {
ipAddress=address.toString();
QLOG_INFO()<<QString("[<<<<---FlowControl::_GetIpAddress Real Right ipAddress: %1 hostName: %2 macAddress: %3 --->>>>]")
.arg(ipAddress).arg(m_posHostName).arg(m_posMacAddress);
break;
}
}
}
m_ipAddress = ipAddress;
m_ipPortAddress = ipAddress+QString(":")+QString::number(ConfigManger::GetInstance().GetHttpServerPort());
m_ipPortAddress = ipAddress.c_str() + QString(":") + QString::number(ConfigManger::GetInstance().GetHttpServerPort());
QLOG_INFO()<<QString("[<<<<---FlowControl::_GetIpAddress Request Real IpAddress: %1, hostName: %2, macAddress: %3, ipPortAddress: %4 --->>>>]")
.arg(m_ipAddress).arg(m_posHostName).arg(m_posMacAddress).arg(m_ipPortAddress);
}
......@@ -414,7 +399,6 @@ void FlowControl::_ClickToLogin()
// 先获取 posHostName; 识别是否 backup-pc机;
_GetIpAddress();
// V2.2023.6.26 版本开始启用插件自动登录的功能; [ 收银员账号 需设置为 "" ,不能体现收银员账号信息 ]
// 原本准备 V2.2023.4.12 版本开始使用插件自动登录的功能; [内控不允许这么操作]
// 2023-05-24 后期出现Simphony系统 服务端证书授权服务的网络异常,门店无法正常登录,插件登录又依赖 店员针对 Simphony系统的首次登录;
_AutoLoginSkipCashier();
} else {
......@@ -424,6 +408,61 @@ void FlowControl::_ClickToLogin()
}
}
// 5s 定期循环刷新;
void FlowControl::_LoopRefresh()
{
// QLOG_INFO()<<QString("[<<<<---_LoopRefresh.......... --->>>>>]");
// Check Db Connect Whether Successed!!!;
if ( m_initSimProcOrderDBRet && m_initPrintSumBillPosDBRet && m_initPrintCupStickPosDBRet
&& m_initPrintMsgQueueDBRet && m_initPrintOrderPromotionDBRet && m_initCheckPoskeyExistPosDBRet &&
m_initSaveNoticeMsgDBRet && m_initPosMetaDataDBRet ) {
// Do Nothing ....;
} else {
if ( !m_initSimProcOrderDBRet ) {
QLOG_ERROR()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initSimProcOrderDBRet Is Failed, Retry Connect--->>>>]");
m_initSimProcOrderDBRet = SimProcOrderDB::getInstance().initSimProcOrderDB();
QLOG_INFO()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initSimProcOrderDBRet Retry Connect Ret:= %1 --->>>>]").arg( m_initSimProcOrderDBRet ? 1 : 0 );
}
if ( !m_initPrintSumBillPosDBRet ) {
QLOG_ERROR()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initPrintSumBillPosDBRet Is Failed, Retry Connect--->>>>]");
m_initPrintSumBillPosDBRet = PrintSumBillPosDB::getInstance().initPrintSumBillPosDB();
QLOG_INFO()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initPrintSumBillPosDBRet Retry Connect Ret:= %1 --->>>>]").arg( m_initPrintSumBillPosDBRet ? 1 : 0 );
}
if ( !m_initPrintCupStickPosDBRet ) {
QLOG_ERROR()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initPrintCupStickPosDBRet Is Failed, Retry Connect--->>>>]");
m_initPrintCupStickPosDBRet = PrintCupStickPosDB::getInstance().initPrintCupStickPosDB();
QLOG_INFO()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initPrintCupStickPosDBRet Retry Connect Ret:= %1 --->>>>]").arg( m_initPrintCupStickPosDBRet ? 1 : 0 );
}
if ( !m_initPrintMsgQueueDBRet ) {
QLOG_ERROR()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initPrintMsgQueueDBRet Is Failed, Retry Connect--->>>>]");
m_initPrintMsgQueueDBRet = PrintMsgQueueDB::getInstance().initPrintMsgQueueDB();
QLOG_INFO()<<QString("[<<<<---FlowControl::_LoopRefresh() initPrintMsgQueueDB Retry Connect Ret:= %1 --->>>>]").arg( m_initPrintMsgQueueDBRet ? 1 : 0 );
}
if ( !m_initPrintOrderPromotionDBRet ) {
QLOG_ERROR()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initPrintOrderPromotionDBRet Is Failed, Retry Connect--->>>>]");
m_initPrintOrderPromotionDBRet = PrintOrderPromotionDB::getInstance().initPrintOrderPromotionDB();
QLOG_INFO()<<QString("[<<<<---FlowControl::_LoopRefresh() initPrintOrderPromotionDB Retry Connect Ret:= %1 --->>>>]").arg( m_initPrintOrderPromotionDBRet ? 1 : 0 );
}
if ( !m_initCheckPoskeyExistPosDBRet ) {
QLOG_ERROR()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initCheckPoskeyExistPosDBRet Is Failed, Retry Connect--->>>>]");
m_initCheckPoskeyExistPosDBRet = CheckPoskeyExistPosDB::getInstance().initCheckPoskeyExistPosDB();
QLOG_INFO()<<QString("[<<<<---FlowControl::_LoopRefresh() initCheckPoskeyExistPosDB Retry Connect Ret:= %1 --->>>>]").arg( m_initCheckPoskeyExistPosDBRet ? 1 : 0 );
}
if ( !m_initSaveNoticeMsgDBRet ) {
QLOG_ERROR()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initSaveNoticeMsgDBRet Is Failed, Retry Connect--->>>>]");
m_initSaveNoticeMsgDBRet = SaveNoticeMsgDB::getInstance().initSaveNoticeMsgDB();
QLOG_INFO()<<QString("[<<<<---FlowControl::_LoopRefresh() initSaveNoticeMsgDB Retry Connect Ret:= %1 --->>>>]").arg( m_initSaveNoticeMsgDBRet ? 1 : 0 );
}
if ( !m_initPosMetaDataDBRet ) {
QLOG_ERROR()<<QString("[<<<<---FlowControl::_LoopRefresh() m_initPosMetaDataDBRet Is Failed, Retry Connect--->>>>]");
m_initPosMetaDataDBRet = PosMetaDataDB::getInstance().initPosMetaDataDB();
QLOG_INFO()<<QString("[<<<<---FlowControl::_LoopRefresh() initPosMetaDataDB Retry Connect Ret:= %1 --->>>>]").arg( m_initPosMetaDataDBRet ? 1 : 0 );
}
}
}
void FlowControl::_QueryAllNoticeMsg()
{
......@@ -1456,6 +1495,7 @@ bool FlowControl::_Login()
emit hideAlert();
emit setStoreInfo(m_storeId);
emit setCashierInfo(m_cashierName);
emit setTerminalIp(m_ipAddress);
//***********************登陆时获取门店的营业状态 begin ************************//
m_eleStoreStatus = recvJson[JSON_ELESTORESTS].toInt();
......@@ -1484,14 +1524,14 @@ bool FlowControl::_Login()
m_remindCasherBlinkFloatTimer->start(5*1000);
//在登陆时再次检查数据库连接是否都正常;
if( !m_initSimProcOrderDBRet || !m_initPrintSumBillPosDBRet || !m_initGetAuthPosDBRet || !m_initPrintCupStickPosDBRet
if( !m_initSimProcOrderDBRet || !m_initPrintSumBillPosDBRet || !m_initPrintCupStickPosDBRet
|| !m_initPrintMsgQueueDBRet || !m_initPrintOrderPromotionDBRet || !m_initCheckPoskeyExistPosDBRet || !m_initSaveNoticeMsgDBRet)
{
result = false;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_Login() m_initSimProcOrderDBRet: %1, m_initPrintSumBillPosDBRet: %2, m_initGetAuthPosDBRet:%3 ,"
"m_initPrintCupStickPosDBRet:%4, m_initPrintMsgQueueDBRet:%5, m_initPrintOrderPromotionDBRet:%6, m_initCheckPoskeyExistPosDBRet:%7,"
"m_initSaveNoticeMsgDBRet:%8, m_initPosMetaDataDBRet:%9 --->>>>]")
.arg( m_initSimProcOrderDBRet?1:0).arg( m_initPrintSumBillPosDBRet?1:0).arg( m_initGetAuthPosDBRet?1:0)
QLOG_INFO()<<QString("[<<<<---FlowControl::_Login() m_initSimProcOrderDBRet: %1, m_initPrintSumBillPosDBRet: %2,"
"m_initPrintCupStickPosDBRet:%3, m_initPrintMsgQueueDBRet:%4, m_initPrintOrderPromotionDBRet:%5, m_initCheckPoskeyExistPosDBRet:%6,"
"m_initSaveNoticeMsgDBRet:%7, m_initPosMetaDataDBRet:%8 --->>>>]")
.arg( m_initSimProcOrderDBRet?1:0).arg( m_initPrintSumBillPosDBRet?1:0)
.arg(m_initPrintCupStickPosDBRet?1:0).arg(m_initPrintMsgQueueDBRet?1:0).arg(m_initPrintOrderPromotionDBRet?1:0)
.arg(m_initCheckPoskeyExistPosDBRet?1:0).arg(m_initSaveNoticeMsgDBRet?1:0).arg(m_initPosMetaDataDBRet?1:0);
......@@ -3760,12 +3800,8 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
}
cObj.insert("paid_trans_id",orderObject->id);
/************************************************************************************/
int hasCashbox = 0 ,hasRefundAuth = 0;
hasCashbox = GetCaboxAReAuth::getInstance().getUserHasCashBox(m_cashierId);
hasRefundAuth = GetCaboxAReAuth::getInstance().getUserRefundAuth(m_cashierId);
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---Simphony_Script请求[ACTION:01:] 获取当前用户是否绑定钱箱:hasCashbox:%1; 当前用户是否拥有退货权限:hasRefundAuth:%2:--->>>>>]").arg(hasCashbox).arg(hasRefundAuth);
cObj.insert("hasCashbox",hasCashbox);
cObj.insert("hasRefundAuth",hasRefundAuth);
cObj.insert("hasCashbox",1);
cObj.insert("hasRefundAuth",1);
/************************************************************************************/
rObj.insert("pay_id", cObj);
QJsonArray products;
......@@ -4235,7 +4271,8 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
void FlowControl::_AutoLoginSkipCashier() {
QLOG_INFO()<<__FUNCTION__;
m_storeId = GetCaboxAReAuth::getInstance().getDbStoreId(); //未登陆成功前 DB storeId;
// m_storeId = GetCaboxAReAuth::getInstance().getDbStoreId(); //未登陆成功前 DB storeId;
m_storeId = PosMetaDataDB::getInstance().getDbStoreId();
m_subStoreId = ConfigManger::GetInstance().GetSubStoreId();
if ( m_backupPosFlag ) {
m_posId= BACKUP_POS_UNIQUE_ID;
......
......@@ -174,6 +174,7 @@ private:
QTimer *m_reportOMSReocrdOrderTimer;
QTimer *m_presistInputPosSuccessReocrdTimer;
QTimer *m_loginTimer;
QTimer *m_loopRefreshTimer;
QTimer *m_queryAllNoticeTimer;
QTimer *m_storageOrderTimer;
QTimer *m_delayGetRefundDetailTimer;
......@@ -249,7 +250,6 @@ private:
//新增三个bool变量用来标识 程序初始化时,两个数据库中的三张表是否能够连接正常;
bool m_initSimProcOrderDBRet;
bool m_initPrintSumBillPosDBRet;
bool m_initGetAuthPosDBRet;
bool m_initPrintCupStickPosDBRet;
bool m_initPrintMsgQueueDBRet;
bool m_initPrintOrderPromotionDBRet;
......@@ -315,6 +315,13 @@ signals:
* 返回:NULL
* */
void setStoreInfo(const QString& storeId);
/* 功能:设置主界面终端IP
* 参数:[1]终端IP
* 返回:NULL
* */
void setTerminalIp(const QString& terminalIp);
/* 功能:设置主界收银员信息
* 参数:[1]收银员信息
* 返回:NULL
......@@ -501,6 +508,8 @@ private slots:
void _ClickToLogin();
void _LoopRefresh();
void RefreshPosMetaData();
void _QueryAllNoticeMsg();
......
......@@ -106,3 +106,32 @@ bool PosMetaDataDB::queryPosMetaDataDB( PosMateDataObject* posMateDataObj) {
m_sqlDb.close();
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:
**/
bool queryPosMetaDataDB(PosMateDataObject* posMateDataObj);
/**
*功能:查询 “门店号” 是否存在本地的POS系统中;
*参数:[0]
*返回: 查询成功的门店号;
**/
QString getDbStoreId();
private:
QMutex m_mutex;
PosMetaDataDB();
......@@ -36,6 +44,7 @@ private:
PosMetaDataDB& operator=(PosMetaDataDB const&);
QSqlDatabase m_sqlDb;
bool m_configTableExist;
QString m_dbStoreId;
signals:
......
......@@ -20,10 +20,67 @@ ConfigManger::ConfigManger()
QString appDir = QApplication::applicationDirPath();
QString config = QString("%1/%2").arg(appDir).arg(CONFIG_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_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()
{
SqlConnectInfo info;
......@@ -47,10 +104,12 @@ QString ConfigManger::GetLoginServerUrl()
{
return m_config->value(INI_LOGINSERVER).toString();
}
QString ConfigManger::GetOrderServerUrl()
{
return m_config->value(INI_ORDERSERVER).toString();
}
QString ConfigManger::GetStoreServerUrl()
{
return m_config->value(INI_STORESERVER).toString();
......
......@@ -4,6 +4,8 @@
#include <QSettings>
#include <QUrl>
#include <QPoint>
#include <QFileInfo>
#include "QsLog.h"
class ConfigManger
{
......@@ -171,6 +173,7 @@ private:
// 程序配置和用户配置
QSettings *m_config;
QSettings *m_userConfig;
QSettings *m_proxyServiceConfig;
};
#endif // CONFIGMANGER_H
......@@ -14,7 +14,7 @@ PrintSumBillPosDB::PrintSumBillPosDB()
bool PrintSumBillPosDB::initPrintSumBillPosDB(){
//QString dbPath = QString(ConfigManage::Instance().databasePath());
bool bRet = false, bRet20 = false, bRet21 = false;
bool bRet = false, bRet20 = false, bRet21 = false, bRet24 = false;
bool bRetCheckColumn = false;
bool bRetChangeLength = false;
m_sqlDb = QSqlDatabase::addDatabase("QODBC","PrintSumBillPosDB"); //数据库驱动类型为SQL Server
......@@ -38,25 +38,29 @@ bool PrintSumBillPosDB::initPrintSumBillPosDB(){
}
bRet = alterTablePrintSumBillPosDB();
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM TakeOut Plugin Version:2.20181130.1 Begin Add New Column Result: %1--->>>>]").arg(bRet?1:0);
QLOG_INFO()<<QString("[<<<<---FM TakeOut Plugin Version:2.20181130.1 Begin Add New Column Result: %1--->>>>]").arg(bRet?1:0);
bRetCheckColumn = alterTablePrintSumBillPosDBAndCheck();
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM TakeOut Plugin Version:2.2019.520.1 Begin Alter table tb_msr_customer_info Column Result: %1--->>>>]")
QLOG_INFO()<<QString("[<<<<---FM TakeOut Plugin Version:2.2019.520.1 Begin Alter table tb_msr_customer_info Column Result: %1--->>>>]")
.arg(bRetCheckColumn?1:0);
bRet20 = alterTablePrintSumBillPosDB20();
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM TakeOut Plugin Version:2.2020.5.12 Begin Add New Column Result: %1--->>>>]").arg(bRet20?1:0);
QLOG_INFO()<<QString("[<<<<---FM TakeOut Plugin Version:2.2020.5.12 Begin Add New Column Result: %1--->>>>]").arg(bRet20?1:0);
bRetChangeLength = alterTablePrintSumBillPosDBLength();
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM TakeOut Plugin Version:2.2020.9.28 Begin Change Store Column Result: %1--->>>>]")
QLOG_INFO()<<QString("[<<<<---FM TakeOut Plugin Version:2.2020.9.28 Begin Change Store Column Result: %1--->>>>]")
.arg(bRetChangeLength?1:0);
bRet21 = alterTablePrintSumBillPosDB21();
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM TakeOut Plugin Version:2.2021.8.2 Begin Add New Column Result: %1--->>>>]").arg(bRet21?1:0);
QLOG_INFO()<<QString("[<<<<---FM TakeOut Plugin Version:2.2021.8.2 Begin Add New Column Result: %1--->>>>]").arg(bRet21?1:0);
return (bRet && bRetCheckColumn && bRet20 && bRetChangeLength && bRet21 );
bRet24 = alterTablePrintSumBillPosDB24();
QLOG_INFO()<<QString("[<<<<---FM TakeOut Plugin Version:2.2024.1.31 Begin Add New Column Result: %1--->>>>]").arg(bRet24?1:0);
return (bRet && bRetCheckColumn && bRet20 && bRetChangeLength && bRet21 && bRet24);
}
bool PrintSumBillPosDB::alterTablePrintSumBillPosDB() {
QMutexLocker mutex(&m_mutex);
int addSuccessNum = 0;
......@@ -253,6 +257,7 @@ bool PrintSumBillPosDB::alterTablePrintSumBillPosDBAndCheck() {
}
}
bool PrintSumBillPosDB::alterTablePrintSumBillPosDB20() {
QMutexLocker mutex(&m_mutex);
int addSuccessNum = 0;
......@@ -824,6 +829,51 @@ bool PrintSumBillPosDB::alterTablePrintSumBillPosDBLength(){
}
}
bool PrintSumBillPosDB::alterTablePrintSumBillPosDB24() {
QMutexLocker mutex(&m_mutex);
int addSuccessNum = 0;
QSqlQuery query(m_sqlDb);
QString selectsql;
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---alterTablePrintSumBillPosDB24::SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return false;
}
// Alter Table reserve41;
selectsql = "select * from syscolumns where id=object_id('tb_msr_customer_info') and name='reserve41'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table tb_msr_customer_info add reserve41 varchar(MAX) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_msr_customer_info reserve41 Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
// Alter Table reserve42;
/*
selectsql = "select * from syscolumns where id=object_id('tb_msr_customer_info') and name='reserve42'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table tb_msr_customer_info add reserve42 varchar(80) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_msr_customer_info reserve42 Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
*/
m_sqlDb.close();
if (1 == addSuccessNum) {
QLOG_INFO()<<"[<<<<---alterTablePrintSumBillPosDB24::addSuccessNum = 1 , Successed --->>>>]";
return true;
} else {
QLOG_ERROR()<<"[<<<<---alterTablePrintSumBillPosDB24::addSuccessNum< 1 --->>>>]"<<addSuccessNum;
return false;
}
}
PrintSumBillPosDB &PrintSumBillPosDB::getInstance()
{
static PrintSumBillPosDB printSumBillPosDB;
......@@ -849,9 +899,9 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
" pay_way, customer_id, customer_name, msr_no, store_id, sub_store_id, store_name, store_address, is_package, order_discount, total_price, "
" orderPayType, sbkAppPayType, sbkAppPayValue, sbkAppRefundPayValue, orderTransFlowNo, orderRefundTransFlowNo, "
" pluginVersion, packageSku, thirdPartyOrderId, discountShopFee, packFee, packDiscount, deliveryFee, deliveryDiscount, "
" reserve8, reserve9, reserve10, reserve11, reserve12, reserve22, reserve23, reserve24, reserve25, reserve26, reserve27 ) "
" reserve8, reserve9, reserve10, reserve11, reserve12, reserve13, reserve22, reserve23, reserve24, reserve25, reserve26, reserve27, reserve41 ) "
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "
" ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" );
" ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" );
query.addBindValue(posCheckNo.toInt()); // --小票号
query.addBindValue(orderObj->lastName); // --顾客-姓
query.addBindValue(orderObj->consigneeName); // --顾客-全名
......@@ -865,11 +915,9 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
} else{ temp_customerSex = ""; }
query.addBindValue(temp_customerSex); // --顾客-性别
query.addBindValue(0); // --顾客-生日
QDateTime qdaTi = QDateTime::currentDateTimeUtc();
QString posCheckOpenTime = posCheckTime.length()?
qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd ") + posCheckTime : qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss");
query.addBindValue(posCheckOpenTime); // --POS开单时间
query.addBindValue(FlowControl::GetInstance()._GetCashierId()); // --订单处理者
query.addBindValue(""); // --变更订单时间 //??????????????????????????????????????????
......@@ -892,7 +940,6 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
query.addBindValue(orderObj->memo); // --订单备注
query.addBindValue(orderObj->secretSignal); // --接头暗号
query.addBindValue(orderObj->consumerRemark); // --顾客备注
// 与 oms协定此块业务出现 歧异 故在此处转换;
int tempBusinessType = orderObj->businessType.toInt();
if ( ( "WSG-MOD" == orderObj->channel || "WSG-MOP" == orderObj->channel ) && "4" == orderObj->platformSource) {
......@@ -916,11 +963,9 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
QString tempAppointedRemindTemplate = QString::number(orderObj->inAdvanceTakemeal) + ";" + orderObj->reserveMakeTime; // 预约模板;
query.addBindValue(tempAppointedRemindTemplate);
query.addBindValue(orderObj->orderType);
QString tempChannel = ("WSG-MOD" == orderObj->channel) ? "MOD" : orderObj->channel;
tempChannel = ( "WSG-MOP" == tempChannel || "MT-MOP" == tempChannel ) ? "MOP" : tempChannel;
tempChannel = ( "EC_WECHAT_MOP" == tempChannel ) ? "EC-MOP" : tempChannel; // EC_WECHAT_MOP: 电商微信MOP 需转换 电商MOP;
query.addBindValue(tempChannel);
query.addBindValue(orderObj->platformSource);
query.addBindValue(orderObj->payWay);
......@@ -949,7 +994,7 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
query.addBindValue(orderObj->packageSku); // 打包sku;
query.addBindValue(orderObj->thirdPartyOrderId); // 三方订单号
query.addBindValue(0); // 商家优惠; 目前暂时使用不到,预留;
if ( orderObj->decouplePosVersion>= 20 && OrderObject::Refunded == orderObj->orderStatus ) {
if ( OrderObject::Refunded == orderObj->orderStatus ) {
query.addBindValue( 0 - orderObj->packageFee ); // --解耦POS后, 退单打包金额需为负数;
query.addBindValue( 0 - orderObj->packDiscount); // --解耦POS后, 退单打包优惠金额需为负数;
query.addBindValue( 0 - orderObj->deliveryPrice ); // --解耦POS后, 退单配送费金额需为负数;
......@@ -960,12 +1005,12 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
query.addBindValue(orderObj->deliveryPrice); // 配送费;
query.addBindValue(orderObj->deliveryDiscount); // 配送费折扣;
}
query.addBindValue(orderObj->carNumber); // Curbside-车牌号;
query.addBindValue(orderObj->privacyPhone); // Curbside-隐私号
query.addBindValue(orderObj->remindTicketTime); // Curbside-打印街送提醒小票时间
query.addBindValue(orderObj->carColor); // Curbside-车颜色;
query.addBindValue(orderObj->carBrandModel); // Curbside-车品牌车型;
query.addBindValue(orderObj->memberLevel); // 会员等级: 黑金 金星 玉星 银星等;
query.addBindValue(orderObj->extendType); // 扩展类型: 20: MOD PLUS 渠道;
query.addBindValue(orderObj->deliveryProvider); // 配送商家类型: 1:蜂鸟 2:美团;
query.addBindValue(orderObj->deliveryType); // 配送方式: 1: 二轮车 2: 四轮车 3: 美团无人机;
......@@ -976,6 +1021,7 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
}
query.addBindValue(orderObj->blockPrintCupTicketTask); // block 打印杯贴小票;
query.addBindValue(orderObj->blockPrintRemindTicketTask); // block 打印街送提醒小票;
query.addBindValue(orderObj->posExtendListString); // POS扩展属性列表;
QLOG_INFO()<<QString("[<<<--PrintSumBillPosDB::insertOrderSumBill waybillId:%1-->>>>]").arg((orderObj->waybillId).length()?orderObj->waybillId:QString("0"));
......@@ -991,10 +1037,10 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
" pay_way, customer_id, customer_name, msr_no, store_id, sub_store_id, store_name, store_address, is_package, order_discount, total_price"
" orderPayType, sbkAppPayType, sbkAppPayValue, sbkAppRefundPayValue, orderTransFlowNo, orderRefundTransFlowNo, "
" pluginVersion, packageSku, thirdPartyOrderId, discountShopFee, packFee, packDiscount, deliveryFee, deliveryDiscount, "
" reserve8, reserve9, reserve10, reserve11, reserve12, reserve22, reserve23, reserve24, reserve25, reserve26, reserve27 ) "
" reserve8, reserve9, reserve10, reserve11, reserve12, reserve13, reserve22, reserve23, reserve24, reserve25, reserve26, reserve27, reserve41 ) "
"VALUES(%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17, %18,"
" %19, %20, %21, %22, %23, %24, %25, %26, %27, %28, %29, %30,%31, %32, %33, %34, %35, %36, %37, %38, %39, %40, %41, %42"
" %43, %44, %45, %46, %47, %48, %49, %50,%51, %52, %53, %54, %55, %56, %57, %58, %59, %60, %61, %62, %63, %64, %65, %66, %67, %68 )")
" %43, %44, %45, %46, %47, %48, %49, %50,%51, %52, %53, %54, %55, %56, %57, %58, %59, %60, %61, %62, %63, %64, %65, %66, %67, %68, %69, %70 )")
.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("")
......@@ -1012,9 +1058,9 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
.arg("").arg(APP_VERSION).arg(orderObj->packageSku).arg(orderObj->thirdPartyOrderId).arg(0).arg(orderObj->packageFee)
.arg(orderObj->packDiscount).arg(orderObj->deliveryPrice).arg(orderObj->deliveryDiscount)
.arg(orderObj->carNumber).arg(orderObj->privacyPhone).arg(orderObj->remindTicketTime)
.arg(orderObj->carColor).arg(orderObj->carBrandModel)
.arg(orderObj->carColor).arg(orderObj->carBrandModel).arg(orderObj->memberLevel)
.arg(orderObj->extendType).arg(orderObj->deliveryProvider).arg(orderObj->deliveryType).arg(orderObj->totalPriceForPos)
.arg(orderObj->blockPrintCupTicketTask).arg(orderObj->blockPrintRemindTicketTask);
.arg(orderObj->blockPrintCupTicketTask).arg(orderObj->blockPrintRemindTicketTask).arg(orderObj->posExtendListString);
} else {
QLOG_INFO()<<QString("[<<<<---SqlServer Database:Insert OrderId %1 Into tb_msr_customer_info Success--->>>>]").arg(orderObj->id);
result = true;
......
......@@ -67,6 +67,13 @@ public:
bool alterTablePrintSumBillPosDBLength();
/**
*功能:新增pos本地数据库打印小票信息表中字段;
*参数:[无]
*返回:true:新增成功,false:新增字段失败
**/
bool alterTablePrintSumBillPosDB24();
/**
*功能:插入一条汇总单信息到pos本地数据库中;
*参数:[1]订单对象指针 [2]小票号 [3]Pos机实际开单时间
*返回: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
qDeleteAll(paymentList);
paymentList.clear();
/*
qDeleteAll(posExtendList);
posExtendList.clear();
*/
const QMetaObject *m = order.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
......@@ -44,8 +49,17 @@ OrderObject::OrderObject(const OrderObject &order, QObject *parent):QObject(pare
PaymentObject *payment=new PaymentObject(*ptr,this);
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)
{
qDeleteAll(proList);
......@@ -60,6 +74,11 @@ OrderObject& OrderObject::operator =(const OrderObject& order)
qDeleteAll(paymentList);
paymentList.clear();
/*
qDeleteAll(posExtendList);
posExtendList.clear();
*/
const QMetaObject *m = order.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
......@@ -89,9 +108,17 @@ OrderObject& OrderObject::operator =(const OrderObject& order)
this->paymentList.append(payment);
}
/*
foreach (auto ptr, order.posExtendList) {
PosExtendObject *posExtendObj=new PosExtendObject(*ptr,this);
this->posExtendList.append(posExtendObj);
}
*/
return *this;
}
void OrderObject::FromJson(const QJsonObject &json)
{
qDeleteAll(proList);
......@@ -106,6 +133,11 @@ void OrderObject::FromJson(const QJsonObject &json)
qDeleteAll(paymentList);
paymentList.clear();
/*
qDeleteAll(posExtendList);
posExtendList.clear();
*/
FetchDataFromJson(json);
QJsonArray products = json[JSON_PRODUCTS].toArray();
......@@ -192,6 +224,28 @@ void OrderObject::FromJson(const QJsonObject &json)
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;
if (json.contains(JSON_PUSH_PLUGIN_OPTIONS) ) {
pluginOptions = json[JSON_PUSH_PLUGIN_OPTIONS].toObject();
......@@ -241,6 +295,7 @@ void OrderObject::FromJson(const QJsonObject &json)
return;
}
void OrderObject::FetchDataFromJson(const QJsonObject &json)
{
QStringList keys = json.keys();
......
......@@ -5,6 +5,9 @@
#include "Model/dishesObject.h"
#include "Model/couponsObject.h"
#include "Model/paymentObject.h"
#include "Model/PosExtendObject.h"
#include <QJsonArray>
#include <QJsonDocument>
class OrderObject : public QObject
{
......@@ -15,7 +18,6 @@ class OrderObject : public QObject
Q_PROPERTY (QString thirdPartyBatch READ getThirdPartyBatch WRITE setThirdPartyBatch)
Q_PROPERTY (QString refundFmId READ getRefundFmId WRITE setRefundFmId)
Q_PROPERTY (QString thirdPartyOrderId READ getThirdPartyOrderId WRITE setThirdPartyOrderId)
Q_PROPERTY (int orderType READ getOrderType WRITE setOrderType)
Q_PROPERTY (QString orgOrderId READ getOrgOrderId WRITE setOrgOrderId)
Q_PROPERTY (QString waybillId READ getWaybillId WRITE setWaybillId)
......@@ -24,7 +26,6 @@ class OrderObject : public QObject
Q_PROPERTY (QString customerId READ getCustomerId WRITE setCustomerId)
Q_PROPERTY (QString customerName READ getCustomerName WRITE setCustomerName)
Q_PROPERTY (QString phone READ getPhone WRITE setPhone)
Q_PROPERTY (QString msr_no READ getMsr_no WRITE setMsr_no)
Q_PROPERTY (QString storeId READ getStoreId WRITE setStoreId)
Q_PROPERTY (QString storeName READ getStoreName WRITE setStoreName)
......@@ -84,28 +85,21 @@ class OrderObject : public QObject
Q_PROPERTY (QString customerSex READ getCustomerSex WRITE setCustomerSex)
Q_PROPERTY (QString platformSource READ getPlatformSource WRITE setPlatformSource)
Q_PROPERTY (int orderIndex READ getOrderIndex WRITE setOrderIndex)
Q_PROPERTY (QString expectDate READ getExpectDate WRITE setExpectDate)
Q_PROPERTY (QString lastExpectDate READ getLastExpectDate WRITE setLastExpectDate)
Q_PROPERTY (QString reserveMakeTime READ getReserveMakeTime WRITE setReserveMakeTime)
Q_PROPERTY (int inAdvanceTakemeal READ getInAdvanceTakemeal WRITE setInAdvanceTakemeal)
Q_PROPERTY (QString subStoreId READ getSubStoreId WRITE setSubStoreId)
Q_PROPERTY (int tenderDeliveryDiscountB READ getTenderDeliveryDiscountB WRITE setTenderDeliveryDiscountB)
Q_PROPERTY (QString tenderDeliveryDiscountBSku READ getTenderDeliveryDiscountBSku WRITE setTenderDeliveryDiscountBSku)
Q_PROPERTY (int decouplePosVersion READ getDecouplePosVersion WRITE setDecouplePosVersion)
Q_PROPERTY (bool deliveryAtProd READ getDeliveryAtProd WRITE setDeliveryAtProd)
Q_PROPERTY (int globalServiceType READ getGlobalServiceType WRITE setGlobalServiceType)
Q_PROPERTY (int globalOrderType READ getGlobalOrderType WRITE setGlobalOrderType)
Q_PROPERTY (int extendType READ getExtendType WRITE setExtendType)
Q_PROPERTY (int deliveryProvider READ getDeliveryProvider WRITE setDeliveryProvider)
Q_PROPERTY (int deliveryType READ getDeliveryType WRITE setDeliveryType)
Q_PROPERTY (int isGiftitForward READ getIsGiftitForward WRITE setIsGiftitForward )
Q_PROPERTY (QString remindTicketTime READ getRemindTicketTime WRITE setRemindTicketTime )
Q_PROPERTY (QString carNumber READ getCarNumber WRITE setCarNumber)
Q_PROPERTY (QString carColor READ getCarColor WRITE setCarColor)
......@@ -117,8 +111,8 @@ class OrderObject : public QObject
Q_PROPERTY (int totalPriceForPos READ getTotalPriceForPos WRITE setTotalPriceForPos )
Q_PROPERTY (int blockPrintCupTicketTask READ getBlockPrintCupTicketTask WRITE setBlockPrintCupTicketTasks )
Q_PROPERTY (int blockPrintRemindTicketTask READ getBlockPrintRemindTicketTask WRITE setBlockPrintRemindTicketTask )
Q_PROPERTY (bool packageFeeAtProduct READ getPackageFeeAtProduct WRITE setPackageFeeAtProduct)
Q_PROPERTY (QString memberLevel READ getMemberLevel WRITE setMemberLevel)
public:
OrderObject(QObject *parent=0)
......@@ -170,6 +164,15 @@ public:
//扩展 星巴克 组合支付的券信息 List;
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有效期检查);
QStringList posKeyList;
......@@ -279,7 +282,6 @@ public:
int blockPrintCupTicketTask = 0;
// block按时打印送餐提醒小票 0:不block; 1:block [reserve27] 对应OMS接口:remindTicketFlag 是否打印送餐小票 0 打印 1 不打印
int blockPrintRemindTicketTask = 0;
int forwardPosStatus; // 正向单入机状态: 0:未知 1: 成功 2:失败;
int negativePosStatus; // 负向单同上;
int deliveryStatus;
......@@ -307,6 +309,15 @@ public:
QString sbkAppRefundPayValue;
bool backupPosFlag;
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();
......@@ -609,6 +620,9 @@ public:
inline int getBlockPrintRemindTicketTask()const{return blockPrintRemindTicketTask;}
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
......@@ -16,70 +16,77 @@ class MacTool
{
public:
static int GetMacByAdaptersAddresses(std::string& macOut)
static int GetMacByAdaptersAddresses(std::string& macOut, std::string& ipOut)
{
int ret = 0;
/*
ULONG outBufLen = sizeof(IP_ADAPTER_ADDRESSES);
PIP_ADAPTER_ADDRESSES pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen);
if (pAddresses == NULL)
return 0;
// Make an initial call to GetAdaptersAddresses to get the necessary size into the ulOutBufLen variable
if(GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == ERROR_BUFFER_OVERFLOW)
QString macAddress ="";
QStringList macAddressList;
QString ipAddress ="";
QStringList ipAddressList;
auto interfaces = QNetworkInterface::allInterfaces();
auto hostAddresses = QNetworkInterface::allAddresses();
// 在线网卡可能存在多个,故还是需要像 upp 一样,将在线全部网卡进行排序后,取第一个
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);
pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen);
if (pAddresses == NULL)
return 0;
QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: interfaces[ %1 ] = %2").arg( i+1 ).arg( interfaces[i].hardwareAddress() );
macAddressList.append( interfaces[i].hardwareAddress() );
}
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);
return ret;
*/
// MAC地址列表大于1时(需要进行升序排序);
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 ="";
auto interfaces = QNetworkInterface::allInterfaces();
for (int i = 0; i < interfaces.length(); i++) {
QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: interfaces[%1]= %2 ").arg( i+1 ).arg( interfaces[i].hardwareAddress() );
if ( interfaces[i].isValid() ) {
/* if( interfaces[i].flags().testFlag(QNetworkInterface::IsUp) &&
interfaces[i].flags().testFlag(QNetworkInterface::IsRunning) &&
!interfaces[i].flags().testFlag(QNetworkInterface::IsLoopBack)) */
address = interfaces[i].hardwareAddress();
break;
// ip 地址可能存在多个,故还是需要像 upp 一样,将全部 ip 地址进行排序后,取第一个
for (int i = 0; i < hostAddresses.length(); i++) {
// if(address.protocol() == QAbstractSocket::IPv4Protocol) { } //1.1.1.1 > length > 7
QHostAddress hadr = hostAddresses[i];
if ( hadr.toString().length() > 7 && !hadr.toString().contains("127.0.0.1") && !hadr.toString().contains("192.168.")
&& !hadr.toString().contains("10.0.75.1") && !hadr.toString().contains("172.") && hadr.toString().contains("10.") )
{
QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: hostAddresses[ %1 ] = %2 , protocol: %3")
.arg( i+1 ).arg( hadr.toString() ).arg( hadr.protocol() );
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()) {
QLOG_ERROR()<<QString("GetMacByAdaptersAddresses:: Local Hardware Address Acquisition Failed!");
if ( macAddress.isEmpty() || ipAddress.isEmpty() ) {
QLOG_ERROR()<<QString("GetMacByAdaptersAddresses:: Local Hardware Address Acquisition Failed || Local IP Address Failed");
} else {
ret = 1;
address = address.replace(QRegExp(":"), "-");
macOut = address.toStdString();
QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: MAC= %1 ").arg( address );
macAddress = macAddress.replace(QRegExp(":"), "-");
macOut = macAddress.toStdString();
ipOut = ipAddress.toStdString();
QLOG_INFO()<<QString("GetMacByAdaptersAddresses::MAC: %1 , IP: %2").arg( macAddress ).arg(ipAddress);
}
return ret;
}
};
......
......@@ -86,7 +86,8 @@ SOURCES += main.cpp\
PrintTicketSelectForm.cpp \
Model/PosMateDataObject.cpp \
DTools/PosMetaDataDB.cpp \
MiniStoreStatusForm.cpp
MiniStoreStatusForm.cpp \
Model/PosExtendObject.cpp
HEADERS += \
Control/flowControl.h \
......@@ -154,7 +155,8 @@ HEADERS += \
PrintTicketSelectForm.h \
Model/PosMateDataObject.h \
DTools/PosMetaDataDB.h \
MiniStoreStatusForm.h
MiniStoreStatusForm.h \
Model/PosExtendObject.h
FORMS += mainForm.ui \
alertForm.ui \
......
......@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 2,2023,10,12
PRODUCTVERSION 2,2023,10,12
FILEVERSION 2,2024,1,31
PRODUCTVERSION 2,2024,1,31
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
......@@ -27,12 +27,12 @@ VS_VERSION_INFO VERSIONINFO
VALUE "CompanyName", "ShangHai.Freemud Co., Ltd."
VALUE "FileDescription", "Delivery Order Plugin Application"
VALUE "InternalName", "fmTakeout.exe"
VALUE "LegalCopyright", "Copyright (C)2014-2023"
VALUE "LegalCopyright", "Copyright (C)2014-2024"
VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2023.10.12"
VALUE "FileVersion", "2.2023.10.12"
VALUE "ProductVersion", "2.2024.1.31"
VALUE "FileVersion", "2.2024.1.31"
//*************************************************************************//
END
END
......
......@@ -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[])
{
......@@ -142,7 +117,6 @@ int main(int argc, char *argv[])
// 兼容之前老版本(Qt5.5 & VS2010)的配置文件 与 守护程序的配置文件:
CopyOriginConfigResetSelf(g_appDir);
ModifyDaemonExeConfigPath();
// 将控制器移到工作线程
FlowControl::GetInstance().moveToThread(&workThread);
......
......@@ -53,6 +53,7 @@ MainForm::MainForm(QWidget *parent) :
connect(&FlowControl::GetInstance(), &FlowControl::setOpeStatus, this, &MainForm::onSetOpeStatus);
connect(&FlowControl::GetInstance(), &FlowControl::setNetStatus, this, &MainForm::onSetNetStatus);
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::changeOrderStatus, this, &MainForm::onChangeOrderStatus/*,Qt::BlockingQueuedConnection*/);
connect(&FlowControl::GetInstance(), &FlowControl::showOrderDetails, this, &MainForm::onShowOrderDetails);
......@@ -187,6 +188,7 @@ void MainForm::_Init()
// 初始化文字
ui->mainLabStoreid->setText(QString::fromLocal8Bit(UI_STOREID));
ui->mainLabVersion->setText(APP_VERSION);
ui->mainSlabIp->setText(TERMINAL_DEF_IP);
// 初始化表
int scales6[] = {3, 4, 2, 3, 3, 3};
......@@ -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)
{
ui->mainLabOpeStatus->setText(status);
......
......@@ -331,6 +331,13 @@ public slots:
* */
void onSetStoreInfo(const QString& storeId);
/* 功能:设置设备ip信息
* 参数:[1]设备ip信息
* 返回:NULL
* */
void onSetTerminalIp(const QString& terminalIp);
/* 功能:设置收银员信息
* 参数:[1]收银员编号
* 返回:NULL
......
......@@ -1181,7 +1181,7 @@
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_8" stretch="0,0,1">
<layout class="QHBoxLayout" name="horizontalLayout_8" stretch="0,0,0">
<property name="spacing">
<number>0</number>
</property>
......@@ -1360,6 +1360,17 @@
</layout>
</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">
<property name="spacing">
<number>10</number>
......
......@@ -51,10 +51,11 @@
//#define APP_VERSION "2.2023.6.29"
//#define APP_VERSION "2.2023.7.24"
// Qt 5.9.1 & VS2015 [2023-09-13] 开始启用新的大版本;
#define APP_VERSION "2.2023.10.12"
#define APP_VERSION "2.2024.1.31"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
#define SERVER_PASSWORD "posoperator@freemud.cn"
#define TERMINAL_DEF_IP "*.*.*.*"
#define CONFIG_NAME "config.ini"
#define USERCONFIG_NAME "userConfig.ini"
......@@ -70,6 +71,11 @@
#define INI_LOGINSERVER "FmServer/loginUrl"
#define INI_ORDERSERVER "FmServer/orderUrl"
#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_OMSBTNPOSTION "OmsBtn/postion"
#define INI_OMSBTNWIDTHOFFSET "OmsBtn/widthoffset"
......@@ -159,6 +165,7 @@
#define JSON_COUPONS "coupons"
#define JSON_EXCHANGECOUPONS "exchangeCoupons"
#define JSON_PAYMENTS "PaymentObjs"
#define JSON_POS_EXTEND_LIST "posExtendList"
#define JSON_SUBPRODUCTS "addExtra"
#define JSON_ITEMSDISCOUNT "itemsDiscount"
#define JSON_COUPONPRODUCTS "skus"
......@@ -238,6 +245,9 @@
#define SOCKET_CONNECT_TIMEOUT_INTERVAL 20*1000
// 写报文超时时间(单位: 毫秒);
#define SOCKET_WRITE_TIMEOUT_INTERVAL 15*1000
// 启动检查超时时间(单位: 毫秒);
#define SOCKET_START_CHECK_TIMEOUT_INTERVAL 5*1000
// 启动超时时间(单位: 毫秒);
#define SOCKET_START_TIMEOUT_INTERVAL 1*10*1000
// 短超时时间(单位: 毫秒);
......
......@@ -81,7 +81,7 @@ QWidget
background-color: #303030;
}
#mainSlabStoreid,#mainSlabOpeStatus,#mainSlabNetStatus,#mainSlabVersion,#mainSlabCashier,
#mainSlabTime,#mainLabStoreid,#mainLabOpeStatus,#mainLabNetStatus,#mainLabVersion,#mainLabCashier
#mainSlabTime,#mainLabStoreid,#mainLabOpeStatus,#mainLabNetStatus,#mainLabVersion,#mainLabCashier,#mainSlabIp
{
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