Commit 59acccd8 by wuyang.zou

PCS插件:

1、插件长连接断开重连时,设备获取的mac地址出现随机排序,导致插件长连接重连服务端验签异常,上游订单无法推送到门店;
2、设备ip展示(过滤非合法ip 和 mac地址并进行排序);
3、黑金优先制作:会员等级 + 打印扩展列表;

Version: 4.2024.1.31
parent b9c94866
......@@ -98,14 +98,17 @@ 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;
......@@ -114,7 +117,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) ) {
outCertificateJson = QJsonDocument::fromJson(outCertificateData).object();
......@@ -794,7 +797,7 @@ void SocketCommunicate::threadStart()
}
QLOG_INFO() << QString("Waitting HttpLogin / openTcpChannel / GetSvrIpPort Failed, Wait 60 Seconds, _httpLoginResult:%1, _openTcpChannel:%2, _stopFlag:%3")
.arg( _httpLoginResult?1:0 ).arg(_openTcpChannel?1:0).arg(_stopFlag?1:0);
Sleep(60*1000);
Sleep(20*1000);
FlowControl::GetInstance()._GetFcMajorInfo(_httpLoginResult, _openTcpChannel, _storeId, _localIp, _hostName, _workStationNum);
}
......
......@@ -175,34 +175,21 @@ bool FlowControl::_AppendOrderInfo2Redis(const OrderObject* orderObject) {
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();
m_ipPortAddress = ipAddress.c_str() + QString(":") + QString::number(ConfigManger::GetInstance().GetHttpServerPort());
foreach(QHostAddress address,info.addresses()) {
if(address.protocol() == QAbstractSocket::IPv4Protocol) {
QLOG_INFO()<<QString("[<<<<---FlowControl::_GetIpAddress getFromLocalHostName:%1--->>>>]").arg(address.toString());
//1.1.1.1 > length > 7
if(address.toString().length()>7 && address.toString()!= "127.0.0.1" && !(address.toString().contains("192.168."))
&& !(address.toString().contains("10.0.75.1") ) && !(address.toString().contains("172.") ) ) {
ipAddress=address.toString();
QLOG_INFO()<<QString("[<<<<---FlowControl::_GetIpAddress Request Real 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());
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);
}
......@@ -801,6 +788,7 @@ bool FlowControl::_Login()
arg(m_storeId).arg(m_cashierName);
emit setStoreInfo(m_storeId);
emit setCashierInfo(m_cashierName);
emit setTerminalIp(m_ipAddress);
//***********************登陆时获取门店的营业状态 begin ************************//
m_eleStoreStatus = recvJson[JSON_ELESTORESTS].toInt();
......
......@@ -262,16 +262,25 @@ signals:
* 返回:NULL
* */
void setStoreInfo(const QString& storeId);
/* 功能:设置主界面终端IP
* 参数:[1]终端IP
* 返回:NULL
* */
void setTerminalIp(const QString& terminalIp);
/* 功能:设置主界收银员信息
* 参数:[1]收银员信息
* 返回:NULL
* */
void setCashierInfo(const QString& cashierInfo);
/* 功能:设置门店营业状态
* 参数:[1]营业状态
* 返回:NULL
* */
void setOpeStatus(const QString& status);
/* 功能:设置门店网络状态
* 参数:[1]网络状态
* 返回:NULL
......
......@@ -206,13 +206,13 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef)
"is_package, last_pay_time, address_latitude, address_longitude, oms_msrno, consumer_birthday, cancel_reason, confirm_time,customer_id,customer_gender,"
"way_bill_id,store_id,store_name,store_address,store_street, pos_id, lang, ext_info, rider_phone, rider_name, "
"displateform_fee, make_status, make_source, make_device_id,reserve_type, appointed_time,appointed_remind_template,sub_store_id, "
"global_order_type,global_service_type,platform_source,callback_url ) "
"global_order_type,global_service_type,platform_source,callback_url, member_level, pcs_extend_list ) "
"VALUES(?, ?, ?, ?, ?,?, ?, ?, ?, ?, "
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?,"
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" );
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" );
query.addBindValue(orderObj->id); // --非码OMS订单号
query.addBindValue(orderObj->id); // --非码OMS订单号
......@@ -327,6 +327,20 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef)
tempPcsCallbackUrl = m_puginInitUrl.mid(0, m_puginInitUrl.length() - 4) + "pcs/order/pms/callback";
}
query.addBindValue( tempPcsCallbackUrl ); // --平台来源枚举值 //PCS系统拼接的 callback_url
query.addBindValue( orderObj->memberLevel ); // 会员等级;
query.addBindValue( orderObj->posExtendListString ); // POS/PCS 扩展属性列表;
/*
QStringList tempSlist;
QString tempPcsExtendList;
if ( orderObj->posExtendList.isEmpty() ) {
tempPcsExtendList = QString("");
} else {
foreach (PosExtendObject* posExtend, orderObj->posExtendList) {
tempSlist.append( posExtend->objectToString() );
}
tempPcsExtendList = QString("[").toUtf8() + tempSlist.join(",") + QString("]").toUtf8();
}
*/
if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---PmsOrdersData::insertOrderData:Insert Order Error--->>>>]"<<query.lastError().text()
......@@ -340,10 +354,12 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef)
"last_pay_time, address_latitude, address_longitude, oms_msrno, consumer_birthday, cancel_reason, "
"confirm_time,customer_id,customer_gender,way_bill_id,store_id,store_name,store_address,store_street, "
"pos_id, lang, ext_info, rider_phone, rider_name, displateform_fee, make_status, make_source, make_device_id,"
" reserve_type, appointed_time,appointed_remind_template,sub_store_id,global_order_type,global_service_type,platform_source,callback_url ) "
"reserve_type, appointed_time,appointed_remind_template,sub_store_id,global_order_type,global_service_type,platform_source,"
"callback_url, member_level, pcs_extend_list ) "
"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)")
"%41, %42, %43, %44, %45, %46, %47, %48, %49, %50, %51, %52, %53, %54,%55,%56,%57,%58,%59,%60,%61,"
"%62,%63,%64)")
.arg(orderObj->id).arg(orderObj->id).arg(orderObj->orderStatus).arg(updateTimeString).arg( tempChannel )
.arg(orderObj->orderType).arg(tempOrderTypeId)
.arg(orderObj->pickupCode).arg(orderObj->totalPrice * 0.01).arg(orderObj->productPrice * 0.01).arg(orderObj->orderDiscount * 0.01)
......@@ -358,7 +374,8 @@ bool PmsOrdersData::insertOrderData(OrderObject* orderObj,QString& pmsOrderRef)
.arg("").arg(orderObj->lang).arg(orderObj->memo).arg(orderObj->riderPhone).arg(orderObj->riderName)
.arg(orderObj->disPlateformFee * 0.01).arg(orderObj->makeStatus).arg(orderObj->makeSource).arg(orderObj->makeDeviceId)
.arg( tempBusinessType ).arg(orderObj->expectDate).arg( QString::number(orderObj->inAdvanceTakemeal) + ";" + orderObj->reserveMakeTime )
.arg(orderObj->subStoreId).arg(orderObj->globalOrderType).arg(orderObj->globalServiceType).arg(orderObj->platformSource).arg( tempPcsCallbackUrl );
.arg(orderObj->subStoreId).arg(orderObj->globalOrderType).arg(orderObj->globalServiceType).arg(orderObj->platformSource)
.arg( tempPcsCallbackUrl ).arg( orderObj->memberLevel ).arg( orderObj->posExtendListString );
} else {
QLOG_INFO()<<QString("[<<<<---PmsOrdersData::insertOrderData:Insert OrderId %1 Into PMS Order Success--->>>>]").arg(orderObj->id);
......
......@@ -7,6 +7,7 @@
#include <QObject>
#include <QMutex>
#include "Model/orderObject.h"
#include "Model/PosExtendObject.h"
#include <Model/couponsObject.h>
#include <Model/singleProductObject.h>
#include "preDefine.h"
......
#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
......@@ -6,11 +6,20 @@ OrderObject::OrderObject(const OrderObject &order, QObject *parent):QObject(pare
{
qDeleteAll(proList);
proList.clear();
qDeleteAll(coupList);
coupList.clear();
qDeleteAll(paymentList);
paymentList.clear();
/*
qDeleteAll(posExtendList);
posExtendList.clear();
*/
const QMetaObject *m = order.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
QMetaProperty qmp = m->property(i);
......@@ -18,29 +27,49 @@ OrderObject::OrderObject(const OrderObject &order, QObject *parent):QObject(pare
QVariant value = order.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
foreach (auto ptr, order.proList) {
dishesObject *product=new dishesObject(*ptr,this);
this->proList.append(product);
}
foreach (auto ptr, order.coupList) {
CouponsObject *coupon=new CouponsObject(*ptr,this);
this->coupList.append(coupon);
}
foreach (auto ptr, order.paymentList) {
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);
proList.clear();
qDeleteAll(coupList);
coupList.clear();
qDeleteAll(paymentList);
paymentList.clear();
/*
qDeleteAll(posExtendList);
posExtendList.clear();
*/
const QMetaObject *m = order.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
QMetaProperty qmp = m->property(i);
......@@ -48,18 +77,29 @@ OrderObject& OrderObject::operator =(const OrderObject& order)
QVariant value = order.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
foreach (auto ptr, order.proList) {
dishesObject *product=new dishesObject(*ptr,this);
this->proList.append(product);
}
foreach (auto ptr, order.coupList) {
CouponsObject *coupon = new CouponsObject(*ptr,this);
this->coupList.append(coupon);
}
foreach (auto ptr, order.paymentList) {
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);
}
*/
return *this;
}
......@@ -67,11 +107,20 @@ void OrderObject::FromJson(const QJsonObject &json)
{
qDeleteAll(proList);
proList.clear();
qDeleteAll(coupList);
coupList.clear();
qDeleteAll(paymentList);
paymentList.clear();
/*
qDeleteAll(posExtendList);
posExtendList.clear();
*/
FetchDataFromJson(json);
QJsonArray products = json[JSON_PRODUCTS].toArray();
foreach(QJsonValue product, products)
{
......@@ -114,9 +163,33 @@ void OrderObject::FromJson(const QJsonObject &json)
paymObject->FetchDataFromJson(paymJson);
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 );
}
return;
}
void OrderObject::FetchDataFromJson(const QJsonObject &json)
{
QStringList keys = json.keys();
......@@ -127,6 +200,7 @@ void OrderObject::FetchDataFromJson(const QJsonObject &json)
return;
}
QString OrderObject::getChannelName()
{
if ( "MOD" == channel ) {
......
......@@ -5,7 +5,9 @@
#include "Model/dishesObject.h"
#include "Model/couponsObject.h"
#include "Model/paymentObject.h"
#include "Model/PosExtendObject.h"
#include <QDateTime>
#include <QJsonDocument>
class OrderObject : public QObject
{
......@@ -16,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)
......@@ -25,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)
......@@ -43,7 +43,6 @@ class OrderObject : public QObject
Q_PROPERTY (QString cancelTime READ getCancelTime WRITE setCancelTime)
Q_PROPERTY (QString cancelReason READ getCancelReason WRITE setCancelReason)
Q_PROPERTY (QString lang READ getLang WRITE setLang)
Q_PROPERTY (QString memo READ getMemo WRITE setMemo)
Q_PROPERTY (QString consumerRemark READ getConsumerRemark WRITE setConsumerRemark)
Q_PROPERTY (QString invoiceType READ getInvoiceType WRITE setInvoiceType)
......@@ -66,7 +65,6 @@ class OrderObject : public QObject
Q_PROPERTY (int disPlateformFee READ getDisPlateformFee WRITE setDisPlateformFee)
Q_PROPERTY (int packageFee READ getPackageFee WRITE setPackageFee)
Q_PROPERTY (int isPackage READ getIsPackage WRITE setIsPackage)
Q_PROPERTY (QString packageSku READ getPackageSku WRITE setPackageSku)
Q_PROPERTY (QString storeMakeSku READ getStoreMakeSku WRITE setStoreMakeSku)
Q_PROPERTY (QString secretSignal READ getSecretSignal WRITE setSecretSignal)
......@@ -90,29 +88,25 @@ 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 reserveMakeTime READ getReserveMakeTime WRITE setReserveMakeTime)
Q_PROPERTY (int inAdvanceTakemeal READ getInAdvanceTakemeal WRITE setInAdvanceTakemeal)
Q_PROPERTY (QString subStoreId READ getSubStoreId WRITE setSubStoreId)
Q_PROPERTY (int globalServiceType READ getGlobalServiceType WRITE setGlobalServiceType)
Q_PROPERTY (int globalOrderType READ getGlobalOrderType WRITE setGlobalOrderType)
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 privacyPhone READ getPrivacyPhone WRITE setPrivacyPhone)
Q_PROPERTY (QString callBackUrl READ getCallBackUrl WRITE setCallBackUrl)
Q_PROPERTY (QString pcsCallbackUrl READ getPcsCallbackUrl WRITE setPcsCallbackUrl)
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 (bool skipPrint READ getSkipPrint WRITE setSkipPrint)
Q_PROPERTY (bool deliveryAtProd READ getDeliveryAtProd WRITE setDeliveryAtProd)
Q_PROPERTY (bool packageFeeAtProduct READ getPackageFeeAtProduct WRITE setPackageFeeAtProduct)
Q_PROPERTY (QString memberLevel READ getMemberLevel WRITE setMemberLevel)
public:
OrderObject(QObject *parent=0)
......@@ -138,6 +132,15 @@ public:
//扩展 星巴克 多条支付方式入机 List;
QList<PaymentObject*>paymentList;
// 扩展 星巴克 多条 POS打印扩展属性List;
// POS/PCS 扩展列表: 优先打印,店用餐具,一次性杯,自带杯
// {printType->string,qty->int,printName->string,printDesc->string}
// printType: 打印类型 1001:优先制作 1101:店用餐具 1102:一次性杯 1103:自带杯
// qty: 数量(自带杯)
// printName: 打印名称
// printDesc: 打印描述
// QList<PosExtendObject*>posExtendList; //不可动态新增字段,在PosExtendObject转序列化时会丢失新增字段; 顾放弃此模式;
public:
QString id =""; //编号
......@@ -250,6 +253,17 @@ public:
int dataBaseIsORSPushInt = 0;
int dataBaseIsORSCancleInt = 0;
QString dataBasePosOrderCheckNo = "";
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();
......@@ -533,6 +547,9 @@ public:
inline bool getPackageFeeAtProduct()const{return packageFeeAtProduct;}
inline void setPackageFeeAtProduct(const bool& v){packageFeeAtProduct = 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;
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))
{
QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: interfaces[ %1 ] = %2").arg( i+1 ).arg( interfaces[i].hardwareAddress() );
macAddressList.append( interfaces[i].hardwareAddress() );
}
}
}
// 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)
{
free(pAddresses);
pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen);
if (pAddresses == NULL)
return 0;
// 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;
}
if(GetAdaptersAddresses(AF_UNSPEC, 0, NULL, pAddresses, &outBufLen) == NO_ERROR)
{
for(PIP_ADAPTER_ADDRESSES pCurrAddresses = pAddresses; pCurrAddresses != NULL; pCurrAddresses = pCurrAddresses->Next)
// 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.") )
{
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;
QLOG_INFO()<<QString("GetMacByAdaptersAddresses:: hostAddresses[ %1 ] = %2 , protocol: %3")
.arg( i+1 ).arg( hadr.toString() ).arg( hadr.protocol() );
ipAddressList.append( hadr.toString() );
}
}
free(pAddresses);
return ret;
*/
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地址列表大于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;
}
};
......
......@@ -67,7 +67,8 @@ SOURCES += main.cpp\
DTools/pmsGetStoreConfig.cpp \
DTools/pmsOrdersData.cpp \
Network/ThreadSocket.cpp \
Control/SocketCommunicate.cpp
Control/SocketCommunicate.cpp \
Model/PosExtendObject.cpp
HEADERS += \
mainForm.h \
......@@ -113,7 +114,8 @@ HEADERS += \
Control/SocketCommunicate.h \
SslOperate/algorithmProcess.h \
SslOperate/certificateOperate.h \
SslOperate/MacTool.h
SslOperate/MacTool.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 4,2023,10,12
PRODUCTVERSION 4,2023,10,12
FILEVERSION 4,2024,1,31
PRODUCTVERSION 4,2024,1,31
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
......@@ -27,12 +27,12 @@ VS_VERSION_INFO VERSIONINFO
VALUE "CompanyName", "ShangHai.Freemud Co., Ltd."
VALUE "FileDescription", "PCS Plugin Application"
VALUE "InternalName", "PcsPlugin.exe"
VALUE "LegalCopyright", "Copyright (C)2014-2023"
VALUE "LegalCopyright", "Copyright (C)2014-2024"
VALUE "OriginalFilename", "PcsPlugin.exe"
VALUE "ProductName", "PCS Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "4.2023.10.12"
VALUE "FileVersion", "4.2023.10.12"
VALUE "ProductVersion", "4.2024.1.31"
VALUE "FileVersion", "4.2024.1.31"
//*************************************************************************//
END
END
......
......@@ -52,6 +52,7 @@ MainForm::MainForm(QWidget *parent) :
//connect(&FlowControl::GetInstance(), &FlowControl::showAlert, this, &MainForm::onShowAlert,Qt::QueuedConnection);
//connect(&FlowControl::GetInstance(), &FlowControl::setStoreInfo, this, &MainForm::onSetStoreInfo,Qt::QueuedConnection);
//connect(&FlowControl::GetInstance(), &FlowControl::setCashierInfo, this, &MainForm::onSetCashierInfo,Qt::QueuedConnection);
connect(&FlowControl::GetInstance(), &FlowControl::setTerminalIp, this, &MainForm::onSetTerminalIp);
connect(&FlowControl::GetInstance(), &FlowControl::setOpeStatus, this, &MainForm::onSetOpeStatus,Qt::QueuedConnection);
connect(&FlowControl::GetInstance(), &FlowControl::setNetStatus, this, &MainForm::onSetNetStatus,Qt::QueuedConnection);
connect(&FlowControl::GetInstance(), &FlowControl::changeOrderStatus, this, &MainForm::onChangeOrderStatus,Qt::QueuedConnection);
......@@ -191,6 +192,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};
......@@ -438,6 +440,11 @@ void MainForm::onSetCashierInfo(const QString &cashierInfo)
ui->mainLabCashier->setText(cashierInfo);
}
void MainForm::onSetTerminalIp(const QString &terminalIp)
{
ui->mainSlabIp->setText(terminalIp);
}
void MainForm::onSetOpeStatus(const QString &status)
{
ui->mainLabOpeStatus->setText(status);
......
......@@ -302,6 +302,13 @@ public slots:
* 返回:NULL
* */
void onSetCashierInfo(const QString& cashierInfo);
/* 功能:设置设备ip信息
* 参数:[1]设备ip信息
* 返回:NULL
* */
void onSetTerminalIp(const QString &terminalIp);
/* 功能:设置门店营业状态
* 参数:[1]营业状态
* 返回:NULL
......
......@@ -1335,6 +1335,17 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<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>
......
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