Commit 1214ca83 by wuyang.zou

POS Plugin Skip PackageFee Save

Update Get Pos Workstation id Origin

V 2.2023.4.12
parent f6bed952
Pipeline #42781 failed with stage
in 0 seconds
......@@ -24,6 +24,7 @@
#include <DTools/PrintOrderPromotionDB.h>
#include <DTools/checkPoskeyExistPosDB.h>
#include <DTools/SaveNoticeMsgDB.h>
#include <DTools/PosMetaDataDB.h>
#include <QHostInfo>
#include "SocketCommunicate.h"
......@@ -70,6 +71,7 @@ FlowControl::FlowControl()
m_initPrintOrderPromotionDBRet = false;
m_initCheckPoskeyExistPosDBRet = false;
m_initSaveNoticeMsgDBRet = false;
m_initPosMetaDataDBRet = false;
//初始化门店营业状态;
m_eleStoreStatus = UNKNOWNSTORE;
......@@ -154,15 +156,17 @@ FlowControl::FlowControl()
// 打开SqlServer 存储上游推送的 通告消息 本地数据库 //
SaveNoticeMsgDB::getInstance();
m_initSaveNoticeMsgDBRet = SaveNoticeMsgDB::getInstance().initSaveNoticeMsgDB();
// */
// 打开SqlServer 查看 POS 收银系统的元数据: 工作站号, 收银员id, 收银员名称 等等//
PosMetaDataDB::getInstance();
m_initPosMetaDataDBRet = PosMetaDataDB::getInstance().initPosMetaDataDB();
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_initSaveNoticeMsgDBRet:%8, m_initPosMetaDataDBRet:%9 --->>>>]")
.arg( m_initSimProcOrderDBRet?1:0).arg( m_initPrintSumBillPosDBRet?1:0).arg( m_initGetAuthPosDBRet?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_initCheckPoskeyExistPosDBRet?1:0).arg(m_initSaveNoticeMsgDBRet?1:0).arg(m_initPosMetaDataDBRet?1:0);
// FlowControl() 初始化时,接受信号的槽对象还没有实例化,所以在此时发信号没有用;
......@@ -295,11 +299,10 @@ void FlowControl::_ClickOMSAssignArea()
m_clickPosCount++;
if ( m_clickPosCount >=3 ) {
if ( m_clickPosCount >= 5 ) {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---m_clickPosCount >= 3 && >=5, m_clickPosCount:%1 , Reset Click Count And Click POS Screen--->>>>]")
.arg(m_clickPosCount);
QLOG_INFO()<<QString("[<<<<---m_clickPosCount >= 3 && >=5, m_clickPosCount:%1 , Reset Click Count And Click POS Screen--->>>>]").arg(m_clickPosCount);
m_clickPosCount = 0;
} else {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---m_clickPosCount >= 3 && <5, m_clickPosCount:%1 , Skip Real Click POS Screen--->>>>]").arg(m_clickPosCount);
QLOG_INFO()<<QString("[<<<<---m_clickPosCount >= 3 && <5, m_clickPosCount:%1 , Skip Real Click POS Screen--->>>>]").arg(m_clickPosCount);
return;
}
}
......@@ -317,6 +320,30 @@ void FlowControl::_ClickOMSAssignArea()
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---触发按钮点击事件:Simphony获取订单请求->坐标(x%1:,y:%2):--->>>>]").arg(nWidth).arg(nHeight);
}
void FlowControl::RefreshPosMetaData() {
PosMateDataObject tmpPosMateObj;
bool queryPosMetaRet = PosMetaDataDB::getInstance().queryPosMetaDataDB(&tmpPosMateObj);
if ( !queryPosMetaRet ) {
QLOG_INFO()<<QString("[<<<<---RefreshPosMetaData: queryPosMetaRet Is Failed, Use Default Value --->>>>>]");
m_cashierId = DEFAULT_CASHIER_ID;
m_cashierName = DEFAULT_CASHIER_NAME;
m_posWorkstationNum = DEFAULT_WORKSTATION_NUM;
} else {
m_cashierId = tmpPosMateObj.empNo;
m_cashierName = tmpPosMateObj.empName;
m_posWorkstationNum = tmpPosMateObj.workstationNumber;
}
QLOG_INFO()<<QString("[<<<<---RefreshPosMetaData: m_storeId=%1, m_subStoreId=%2, m_posWorkstationNum=%3, cashierId=%4, cashierName=%5 --->>>>>]")
.arg(m_storeId).arg(m_subStoreId).arg(m_posWorkstationNum).arg(m_cashierId).arg(m_cashierName);
emit setCashierInfo(m_cashierName); // POS上收银员切换账号后,插件上右下角的收银员信息也及时更新;
}
void FlowControl::_ClickToLogin()
{
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---触发按钮点击事件:_ClickToLogin: m_bLoginResult:%1 --->>>>>]").arg(m_bLoginResult);
......@@ -331,9 +358,12 @@ void FlowControl::_ClickToLogin()
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---触发按钮点击事件:FM外卖插件10s后再次尝试登陆--->>>>]");
_ClickOMSAssignArea();
}
// 原本准备 V2.2023.4.12 版本开始使用插件自动登录的功能; [内控不允许这么操作]
// _AutoLoginSkipCashier();
} else {
m_loginTimer->start(1000*60);
// 即使插件上登录成功,也需要定时刷新POS收银员账号信息;
// RefreshPosMetaData();
}
}
......@@ -864,6 +894,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->storeType = 0;
orderObject->decouplePosVersion = 0;
orderObject->deliveryAtProd = false;
orderObject->packageFeeAtProduct = false;
orderObject->extendType = 0;
orderObject->deliveryProvider = 0;
orderObject->deliveryType = 0;
......@@ -1199,10 +1230,18 @@ void FlowControl::onGetNewStoreInfo()
m_pullDishesSocket = new BillSocket(this);
m_pullOrderListSocket = new BillSocket(this);
// 所有数据库表初始化都成功; [不包含: m_initGetAuthPosDBRet ; m_initPosMetaDataDBRet ]
if ( m_initSimProcOrderDBRet & m_initPrintSumBillPosDBRet & m_initPrintCupStickPosDBRet & m_initPrintMsgQueueDBRet & m_initPrintOrderPromotionDBRet
& m_initCheckPoskeyExistPosDBRet & m_initSaveNoticeMsgDBRet ) {
emit showAlert(AlertForm::LOADING, QString::fromLocal8Bit("正在获取门店信息......"));
} else {
emit showAlert(AlertForm::LOADING, QString::fromLocal8Bit("POS本地数据库共享访问权限没有开通......"));
return;
}
QString tmp;
ConfigManger::GetInstance().GetStoreInfo(tmp, m_password);
_Login();
m_bFirstRecvInfo =false;
return ;
......@@ -1257,8 +1296,8 @@ bool FlowControl::_Login()
}
m_existNoAckNotice = SaveNoticeMsgDB::getInstance().existNoAckNotice() ? 1 : 0;
m_puginVersionComments = ConfigManger::GetInstance().GetOrderServerUrl();
sendJson = DataManger::GetInstance().GetLoginData(ConfigManger::GetInstance().GetPartnerId(),m_storeId,
m_password, m_posId, m_cashierId, m_ipPortAddress, m_puginVersionComments);
// 登录新增Pos相关属性字段;
......@@ -1338,10 +1377,10 @@ bool FlowControl::_Login()
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_initSaveNoticeMsgDBRet:%8, m_initPosMetaDataDBRet:%9 --->>>>]")
.arg( m_initSimProcOrderDBRet?1:0).arg( m_initPrintSumBillPosDBRet?1:0).arg( m_initGetAuthPosDBRet?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_initCheckPoskeyExistPosDBRet?1:0).arg(m_initSaveNoticeMsgDBRet?1:0).arg(m_initPosMetaDataDBRet?1:0);
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("尝试打开POS本地数据库(MMXB** 或 DataS**)失败"));
} else {
......@@ -1374,12 +1413,10 @@ bool FlowControl::_Login()
if ( ConfigManger::GetInstance().GetOpenTcpChannel() ){
m_openTcpChannel = true;
}
if ( m_bLoginResult && m_openTcpChannel ) {
QLOG_INFO() << QString("[<<<<---Login Success, Emit Signal To SocketCommunicate Begin Connect Tcp Socket --->>>>]");
emit doLoginSuccess(true, m_openTcpChannel, m_storeId, m_ipAddress, m_posHostName, m_posWorkstationNum);
}
// 启动定时器: 15s 后, 插件读取本地全部门店通告记录; 防止在此处执行,程序奔溃无法 正常运行;
m_queryAllNoticeTimer->start(1000 * 15);
return result;
......@@ -2500,21 +2537,6 @@ bool FlowControl::_ResponseSimphony04Request(const QJsonObject &content, QJsonOb
order_p->isCancle = true;
order_p->negativePosStatus = 1;
}
//处理预约实物入机后数据库更新: 此业务淘汰;
/*
if ( order_p->orsPushOrderType==1 && order_p->appointmentDayFlag) {
SimProcOrderDB::getInstance().updateORSPushOrderStatus(orderId,1);
order_p->isORSPush= true;
order_p->forwardPosStatus = 1;
} else if(0 == order_p->orsPushOrderType && order_p->appointmentDayFlag) {
SimProcOrderDB::getInstance().updateORSCancleOrderStatus(orderId,1);
//避免重复退预约配送费订单
SimProcOrderDB::getInstance().updateRefundOrderStatus(orderId,1);
order_p->isCancle = true;
order_p->isORSCancle = true;
order_p->negativePosStatus = 1;
}
*/
/***** 更新 POS本地数据库的商品表 真实小票号: 解耦后,仍然有能正确打印订单数据的关联关系 begin:*********/
bool retSyncOrderProduct = true; //默认是同步POS商品数据成功; 目前只有 businessType: 20:WSG-杯贴祝福; 30: 拼团;
......@@ -3117,7 +3139,6 @@ bool FlowControl::_ResponseHM21Request(const QJsonObject &content, QJsonObject &
error=QString::fromLocal8Bit("_ResponseHM21Request Action:21:accept HM Order empty");
}
//<2>:向simphony整合订单数据:准备向POS录单【_OrderAnalysis(hmOrderJson);函数会触发simphony录单动作(退单的情况也会存入队列中)】
//result=_ResponseSimReqFristOrderData(content, data,error,content["orderId"].toString());
} else {
result = false;
if(error.isEmpty()) {
......@@ -3142,10 +3163,16 @@ bool FlowControl::_ResponseSimReqTryLogin(const QJsonObject &content,QString &er
}
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_ResponseSimReqTryLogin: m_storeId=%1 , m_subStoreId=%2 --->>>>>]").arg(m_storeId).arg(m_subStoreId);
m_posId= "111111111111111"; // 避免上游出现多条 POS插件登录记录(设备id不一致);
if ( m_backupPosFlag ) {
m_posId= BACKUP_POS_UNIQUE_ID;
} else {
m_posId= MASTER_POS_UNIQUE_ID;
}
m_posWorkstationNum=content["businessDay"].toString(); // 折中方案,使用营业时间透传 POS WorkStation Num;
m_cashierId=content["operatorId"].toString();
m_cashierName=content["operatorName"].toString();
emit setCashierInfo(m_cashierName); //POS上收银员切换账号后,插件上右下角的收银员信息也及时更新;
// 登录
if(m_bFirstRecvInfo) {
error = QString::fromLocal8Bit("FMOMS Plug-in Program Try Login On");
emit doLogin();
......@@ -3153,12 +3180,16 @@ bool FlowControl::_ResponseSimReqTryLogin(const QJsonObject &content,QString &er
return true;
}
bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJsonObject &data, QString &error, const QString &orderId)
{
QLOG_INFO()<<__FUNCTION__<<error<<orderId;
// m_deviceNo=content["posId"].toString(); //将来用来扩展新字段值
m_posId= "111111111111111"; // 避免上游出现多条 POS插件登录记录(设备id不一致);
if ( m_backupPosFlag ) {
m_posId= BACKUP_POS_UNIQUE_ID;
} else {
m_posId= MASTER_POS_UNIQUE_ID;
}
m_posWorkstationNum=content["businessDay"].toString(); // 折中方案,使用营业时间透传 POS WorkStation Num;
m_cashierId=content["operatorId"].toString();
m_cashierName=content["operatorName"].toString();
......@@ -3829,8 +3860,9 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//**********************************整合包装费-begin*****************************************//
// 向商品列表尾部 添加 包装费项 + 包装费折扣项;
// 包装费 >0 + MOP 也不能入机【特别说明:WSG-MOD 配送费及配送费折扣信息存储 coupons中;故在此处排除】;
if ( orderObject->packageFee > 0 && ( "MOD"==orderObject->channel || "ELE" == orderObject->channel || "MT-MOD" == orderObject->channel ) ) {
// 包装费 >0 + MOP 也不能入机【特别说明:WSG-MOD 配送费及配送费折扣信息存储 coupons中;故在此处排除】
//【包装费不能是已经添加到商品列表: !orderObject->packageFeeAtProduct】
if ( orderObject->packageFee > 0 && !orderObject->packageFeeAtProduct && ( "MOD"==orderObject->channel || "ELE" == orderObject->channel || "MT-MOD" == orderObject->channel ) ) {
QJsonObject tPackageFeeObj;
tPackageFeeObj.insert("consume_num", orderObject->packageFee/100);
tPackageFeeObj.insert("pid", "6000201"); //包装费SKU;
......@@ -3850,8 +3882,8 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
tPackDiscountObj.insert("original_price", orderObject->packDiscount);
products.push_back(tPackDiscountObj);
}
//打包费是0元时( MOP 包装费不能入机):需录入打包费[非-MOP(销售退货),非-MOP测试];
} else if ( 0 == orderObject->packageFee && ( "MOD"==orderObject->channel || "ELE" == orderObject->channel || "MT-MOD" == orderObject->channel ) ) {
//打包费是0元时( MOP 包装费不能入机):需录入打包费[非-MOP(销售退货),非-MOP测试]; 【包装费不能是已经添加到商品列表: !orderObject->packageFeeAtProduct】
} else if ( 0 == orderObject->packageFee && !orderObject->packageFeeAtProduct && ( "MOD"==orderObject->channel || "ELE" == orderObject->channel || "MT-MOD" == orderObject->channel ) ) {
QJsonObject tPackageFeeObj;
tPackageFeeObj.insert("consume_num", 1);
tPackageFeeObj.insert("pid","6000201"); //包装费SKU;
......@@ -3906,12 +3938,14 @@ void FlowControl::_AutoLoginSkipCashier() {
QLOG_INFO()<<__FUNCTION__;
m_storeId = GetCaboxAReAuth::getInstance().getDbStoreId(); //未登陆成功前 DB storeId;
m_subStoreId = ConfigManger::GetInstance().GetSubStoreId();
m_posId= "222222222222222"; // 避免上游出现多条 POS插件登录记录(设备id不一致);
m_posWorkstationNum = GetCaboxAReAuth::getInstance().getDbWorkStationNum(); //POS DB WorkStation Num;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---_AutoLoginSkipCashier: m_storeId=%1, m_subStoreId=%2 "
" m_posWorkstationNum: %3 --->>>>>]").arg(m_storeId).arg(m_subStoreId).arg(m_posWorkstationNum);
m_cashierId="90001";
m_cashierName="MICROS";
if ( m_backupPosFlag ) {
m_posId= BACKUP_POS_UNIQUE_ID;
} else {
m_posId= MASTER_POS_UNIQUE_ID;
}
// m_posWorkstationNum = GetCaboxAReAuth::getInstance().getDbWorkStationNum(); //POS DB WorkStation Num; [不准确: 存在空值]
RefreshPosMetaData();
if ( m_storeId.length() ) {
// emit doLogin(); signal Can't Send Success; Same Pthread, No Need Use Signal & Slot;
......
......@@ -240,6 +240,7 @@ private:
bool m_initPrintOrderPromotionDBRet;
bool m_initCheckPoskeyExistPosDBRet;
bool m_initSaveNoticeMsgDBRet;
bool m_initPosMetaDataDBRet;
// 新增: 记录OMS备用服务的 CallBackUrl 地址; 便于OMS服务异常时,具备热切换功能: 登录 + 订单列表 + 心跳 + 自检单;
QString m_serviceCallBackUrl;
......@@ -468,6 +469,8 @@ private slots:
void _ClickToLogin();
void RefreshPosMetaData();
void _QueryAllNoticeMsg();
void _ClickToNotifySimPullOrder();
......
#include "PosMetaDataDB.h"
#include "QsLog.h"
#include <QDateTime>
#include "Control/flowControl.h"
#include "DTools/configManger.h"
PosMetaDataDB::PosMetaDataDB()
{
QLOG_INFO()<<"[<<<<---PosMetaData:: Structure POS Meta Data Info DataBase--->>>>]";
}
PosMetaDataDB &PosMetaDataDB::getInstance()
{
static PosMetaDataDB posMetaDataDB;
return posMetaDataDB;
}
bool PosMetaDataDB::initPosMetaDataDB(){
bool bRet = false;
m_sqlDb = QSqlDatabase::addDatabase("QODBC","PosMetaData"); //数据库驱动类型为SQL Server
if ( m_sqlDb.isValid() ) {
QLOG_INFO()<<"[<<<<---SqlServer ODBC driver is valid--->>>>]";
QString dsn="DRIVER={SQL SERVER};SERVER=127.0.0.1\\sqlexpress;DATABASE=XextCustomDb";
m_sqlDb.setDatabaseName(dsn); //设置数据源名称
m_sqlDb.setUserName("sa"); //登录用户
m_sqlDb.setPassword("SIM29@123");
if(!m_sqlDb.open()) { //打开数据库
QLOG_ERROR()<<"[<<<<---SqlServer Open Database error:--->>>>]"<<m_sqlDb.lastError().text();
} else {
QLOG_INFO()<<"[<<<<---PosMetaData::SqlServer Test Open database success!:--->>>>]";
QSqlQuery query(m_sqlDb);
QString selectsql ="select * from sys.tables where name='SBUX_SysConfig'" ;
if(!query.exec(selectsql)) {
QLOG_ERROR()<<"[<<<<---PosMetaData::SqlServer Database check SBUX_SysConfig failed--->>>>]"<<query.lastError().text();
}
if(query.next()) {
QLOG_INFO() << "[<<<<---PosMetaData::Table SBUX_SysConfig Has Exist--->>>>]";
bRet = true;
}
m_sqlDb.close();
}
} else {
QLOG_ERROR()<<"[<<<<---SqlServer ODBC driver no valid--->>>>]";
}
return bRet;
}
bool PosMetaDataDB::queryPosMetaDataDB( PosMateDataObject* posMateDataObj) {
QMutexLocker mutex(&m_mutex);
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return false;
}
bool result = true;
QSqlQuery query(m_sqlDb);
QString queryPosMetaDataConfig = QString("SELECT [ConfigName], max( CASE [strKey] WHEN 'WorkstationNumber' THEN strValue else '' end ) as 'WorkstationNumber', "
" max( CASE [strKey] WHEN 'EmpNo' THEN strValue else '' end ) as 'EmpNo', "
" max( CASE [strKey] WHEN 'EmpName' THEN strValue else '' end ) as 'EmpName' "
" FROM [XextCustomDb].[dbo].[SBUX_SysConfig] WHERE ConfigName = 'Workstation' group by ConfigName ");
// WorkstationNumber; // EmpNo; // EmpName;
query.prepare( queryPosMetaDataConfig );
if(!query.exec()) {
QLOG_ERROR()<<QString("[<<<<---SqlServer Database::queryPosMetaDataDB Failed, queryPosMetaDataConfig = %1 --->>>>]").arg(queryPosMetaDataConfig)
<<query.lastError().text();
return false;
} else {
if ( query.next() ) {
// QLOG_INFO()<<QString("[<<<<---SqlServer Database::queryPosMetaDataDB Success, query.value(1) = %1, query.value(2) = %2 , query.value(3) = %3--->>>>]")
// .arg( query.value(1).toString() ).arg( query.value(2).toString() ).arg( query.value(3).toString() );
if( query.value(1).toString().length() ) {
posMateDataObj->workstationNumber = query.value(1).toString();
} else {
posMateDataObj->workstationNumber = DEFAULT_WORKSTATION_NUM;
}
if( query.value(2).toString().length() ) {
posMateDataObj->empNo = query.value(2).toString();
} else {
posMateDataObj->empNo = DEFAULT_CASHIER_ID;
}
if( query.value(3).toString().length() ) {
posMateDataObj->empName = query.value(3).toString();
} else {
posMateDataObj->empName = DEFAULT_CASHIER_NAME;
}
}
}
m_sqlDb.close();
return result;
}
#ifndef POSMETADATADB_H
#define POSMETADATADB_H
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QObject>
#include <QMutex>
#include "preDefine.h"
#include <Model/PosMateDataObject.h>
class PosMetaDataDB : public QObject
{
Q_OBJECT
public:
static PosMetaDataDB& getInstance();
/**
*功能:初始化pos本地数据库;方便后期判断 打开pos本地数据库是否成功;
*参数:[无]
*返回:true:能够成功打开POS本地数据库,false:不能够成功打开POS本地数据库
**/
bool initPosMetaDataDB();
/**
*功能:查询 “工作站号” “收银员账号” “收银员名称” 是否存在本地的POS系统中;
*参数:[3]
*返回:true 查询成功,false 查询失败;
**/
bool queryPosMetaDataDB(PosMateDataObject* posMateDataObj);
private:
QMutex m_mutex;
PosMetaDataDB();
PosMetaDataDB(PosMetaDataDB const&);
PosMetaDataDB& operator=(PosMetaDataDB const&);
QSqlDatabase m_sqlDb;
signals:
public slots:
};
#endif // POSMETADATADB_H
......@@ -268,7 +268,7 @@ QJsonObject DataManger::GetSelfCheckReqData()
{
QJsonObject rObj;
rObj.insert(JSON_IPADDRESS,m_posIpAddress);
rObj.insert(JSON_MACHINECODE,"111111111111111");
rObj.insert(JSON_MACHINECODE, MASTER_POS_UNIQUE_ID );
rObj.insert(JSON_STOREID,m_storeId);
rObj.insert(JSON_PARTNERID,m_partnerId);
rObj.insert(JSON_PASSWORD,"posoperator@freemud.cn");
......
......@@ -794,8 +794,6 @@ bool PrintCupStickPosDB::insertDeliveryPackageAndPack(OrderObject* orderObj, con
bool insertPackRet = true ;
int insertPackPlaceHolderSeq = 0;
bool insertPackageFeeRet = true ;
int insertPackageFeePlaceHolderSeq = 0;
bool insertDeliveryFeeRet = true;
QSqlQuery query(m_sqlDb);
QDateTime qdaTi = QDateTime::currentDateTimeUtc();
......@@ -840,7 +838,7 @@ bool PrintCupStickPosDB::insertDeliveryPackageAndPack(OrderObject* orderObj, con
}
}
if( orderObj->channel == "MOD" || orderObj->channel == "ELE" || orderObj->channel == "MT-MOD" ) {
if ( !orderObj->packageFeeAtProduct && ( orderObj->channel == "MOD" || orderObj->channel == "ELE" || orderObj->channel == "MT-MOD" ) ) {
// Insert Package Fee Into tb_main_prod_refinfo;
query.prepare("INSERT INTO tb_main_prod_refinfo(chk_num, order_id, order_status, create_datetime, "
......@@ -876,7 +874,6 @@ bool PrintCupStickPosDB::insertDeliveryPackageAndPack(OrderObject* orderObj, con
insertPackageFeeRet = false;
return false;
} else {
insertPackageFeePlaceHolderSeq = 1;
QLOG_INFO()<<QString("[<<<<---SqlServer Database:Insert OrderId %1 PackageFee:%2 Into tb_main_prod_refinfo Success--->>>>]")
.arg(orderObj->id).arg(orderObj->packageFee);
}
......@@ -884,7 +881,7 @@ bool PrintCupStickPosDB::insertDeliveryPackageAndPack(OrderObject* orderObj, con
// 上游oms 开关已完全打开: 配送费已添加到商品列表中; 顾无需此处配送费整合逻辑;
}
if ( !insertDeliveryFeeRet || !insertPackageFeeRet || !insertPackRet ) {
if ( !insertPackageFeeRet || !insertPackRet ) {
return false;
} else {
return true;
......
#include "PosMateDataObject.h"
PosMateDataObject::PosMateDataObject(const PosMateDataObject &posMateDataObj, QObject *parent):QObject(parent)
{
const QMetaObject *m = posMateDataObj.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
QMetaProperty qmp = m->property(i);
QString key = QString::fromLatin1(qmp.name());
QVariant value = posMateDataObj.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
}
PosMateDataObject& PosMateDataObject::operator =(const PosMateDataObject& posMateDataObj)
{
const QMetaObject *m = posMateDataObj.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
QMetaProperty qmp = m->property(i);
QString key = QString::fromLatin1(qmp.name());
QVariant value = posMateDataObj.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
return *this;
}
/*
void PosMateDataObject::FetchDataFromJson(const QJsonObject &json)
{
foreach(QString key, json.keys())
{
setProperty(key.toUtf8(), json[key].toVariant());
}
return;
}
*/
#ifndef POSMATEDATAOBJECT_H
#define POSMATEDATAOBJECT_H
#include <QObject>
#include <QJsonObject>
#include <QVariant>
#include <QMetaProperty>
class PosMateDataObject : public QObject
{
Q_OBJECT
Q_PROPERTY (QString workstationNumber READ getWorkstationNumber WRITE setWorkstationNumber)
Q_PROPERTY (QString empNo READ getEmpNo WRITE setEmpNo)
Q_PROPERTY (QString empName READ getEmpName WRITE setEmpName)
public:
explicit PosMateDataObject(QObject *parent = 0):QObject(parent){}
PosMateDataObject(const PosMateDataObject& posMateDataObj,QObject* parent=0);
PosMateDataObject& operator =(const PosMateDataObject& posMateDataObj);
// void FetchDataFromJson(const QJsonObject &json);
QString workstationNumber;
QString empNo;
QString empName;
protected:
inline QString getWorkstationNumber(){ return workstationNumber; }
inline void setWorkstationNumber(const QString& v){ workstationNumber = v; }
inline QString getEmpNo(){ return empNo; }
inline void setEmpNo(const QString& v){ empNo = v; }
inline QString getEmpName(){ return empName; }
inline void setEmpName(const QString& v){ empName = v; }
};
#endif // POSMATEDATAOBJECT_H
......@@ -116,6 +116,8 @@ class OrderObject : public QObject
Q_PROPERTY (QJsonObject pluginOptions READ getPluginOptions WRITE setPluginOptions)
Q_PROPERTY (int totalPriceForPos READ getTotalPriceForPos WRITE setTotalPriceForPos )
Q_PROPERTY (bool packageFeeAtProduct READ getPackageFeeAtProduct WRITE setPackageFeeAtProduct)
public:
OrderObject(QObject *parent=0)
......@@ -251,6 +253,7 @@ public:
QString tenderDeliveryDiscountBSku; // 配送费 B账户优惠SKU;
int decouplePosVersion; // 解耦POS版本
bool deliveryAtProd; // 配送费已添加到商品列表标志;
bool packageFeeAtProduct; // 包装费已添加到商品列表标志;
int globalServiceType; // 全链路服务类型: globalServiceType【新增字段:int】
int globalOrderType; // 全链路订单类型: globalOrderType 【新增字段:int】
......@@ -542,6 +545,9 @@ public:
inline bool getDeliveryAtProd()const{return deliveryAtProd;}
inline void setDeliveryAtProd(const bool& v){deliveryAtProd = v;}
inline bool getPackageFeeAtProduct()const{return packageFeeAtProduct;}
inline void setPackageFeeAtProduct(const bool& v){packageFeeAtProduct = v;}
inline QString getTenderDeliveryDiscountBSku()const{return tenderDeliveryDiscountBSku;}
inline void setTenderDeliveryDiscountBSku(const QString& v){tenderDeliveryDiscountBSku = v;}
......
......@@ -201,27 +201,8 @@ void DetailForm::InitData(OrderObject *orderObject)
}
/*********************************** 遍历 WSG 券列表:券信息展示 end *********************************************************/
// 新增配送费 + 打包费
ui->detailTable0->insertRow(pNum);
ui->detailTable0->setItem(pNum, 0, new QTableWidgetItem(QString::fromLocal8Bit("配送费:") + QString("6000101") )); // 配送费
ui->detailTable0->item(pNum, 0)->setTextAlignment(Qt::AlignCenter);
ui->detailTable0->setItem(pNum, 1, new QTableWidgetItem(Penny2Dollar(orderObject->deliveryPrice))); // 价格
ui->detailTable0->item(pNum, 1)->setTextAlignment(Qt::AlignCenter);
ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(1))); // 数量
ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignCenter);
pNum = pNum + 1;
// 新增展示配送费折扣项显示;
if (orderObject->deliveryDiscount > 0 ){
ui->detailTable0->insertRow(pNum);
ui->detailTable0->setItem(pNum, 0, new QTableWidgetItem( QString("( ") + QString::fromLocal8Bit("配送费折扣"))); // 配送费折扣
ui->detailTable0->item(pNum, 0)->setTextAlignment(Qt::AlignRight);
ui->detailTable0->setItem(pNum, 1, new QTableWidgetItem( QString("-") + Penny2Dollar(orderObject->deliveryDiscount))); // 价格
ui->detailTable0->item(pNum, 1)->setTextAlignment(Qt::AlignCenter);
ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(1) + QString(" )"))); // 数量
ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignLeft);
pNum = pNum + 1;
}
// 新增-- 包装费
if ( !orderObject->packageFeeAtProduct ) {
ui->detailTable0->insertRow(pNum);
ui->detailTable0->setItem(pNum, 0, new QTableWidgetItem(QString::fromLocal8Bit("包装费:") + QString("6000201") )); // 包装费
ui->detailTable0->item(pNum, 0)->setTextAlignment(Qt::AlignCenter);
......@@ -231,7 +212,7 @@ void DetailForm::InitData(OrderObject *orderObject)
ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignCenter);
pNum = pNum + 1;
// 新增展示打包费折扣项显示;
if (orderObject->packDiscount > 0){
if (orderObject->packDiscount > 0) {
ui->detailTable0->insertRow(pNum);
ui->detailTable0->setItem(pNum, 0, new QTableWidgetItem( QString("( ") + QString::fromLocal8Bit("包装费折扣"))); // 包装费折扣
ui->detailTable0->item(pNum, 0)->setTextAlignment(Qt::AlignRight);
......@@ -241,6 +222,7 @@ void DetailForm::InitData(OrderObject *orderObject)
ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignLeft);
pNum = pNum + 1;
}
}
// 新增展示整单折扣项显示;
if (orderObject->orderDiscount> 0){
......
......@@ -83,7 +83,9 @@ SOURCES += main.cpp\
noticeForm.cpp \
DTools/saveNoticeMsgDB.cpp \
Model/NoticeObject.cpp \
PrintTicketSelectForm.cpp
PrintTicketSelectForm.cpp \
Model/PosMateDataObject.cpp \
DTools/PosMetaDataDB.cpp
HEADERS += \
Control/flowControl.h \
......@@ -148,7 +150,9 @@ HEADERS += \
noticeForm.h \
DTools/saveNoticeMsgDB.h \
Model/NoticeObject.h \
PrintTicketSelectForm.h
PrintTicketSelectForm.h \
Model/PosMateDataObject.h \
DTools/PosMetaDataDB.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,2,23
PRODUCTVERSION 2,2023,2,23
FILEVERSION 2,2023,4,12
PRODUCTVERSION 2,2023,4,12
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
......@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO
VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2023.2.23"
VALUE "FileVersion", "2.2023.2.23"
VALUE "ProductVersion", "2.2023.4.12"
VALUE "FileVersion", "2.2023.4.12"
//*************************************************************************//
END
END
......
......@@ -46,7 +46,8 @@
//#define APP_VERSION "2.2022.8.18"
//#define APP_VERSION "2.2022.10.20"
//#define APP_VERSION "2.2022.11.30"
#define APP_VERSION "2.2023.2.23"
//#define APP_VERSION "2.2023.2.23"
#define APP_VERSION "2.2023.4.12"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
......@@ -318,6 +319,12 @@
#define PROPERTY_SHIFTID "shiftId" // 班次编号
#define PROPERTY_SHIFTNAME "shiftName" // 班次名称
#define MASTER_POS_UNIQUE_ID "111111111111111" // 初始主POS 唯一ID;
#define BACKUP_POS_UNIQUE_ID "222222222222222" // 备机POS (OnePOS) 唯一ID;
#define DEFAULT_CASHIER_ID "90001"
#define DEFAULT_CASHIER_NAME "MICROS"
#define DEFAULT_WORKSTATION_NUM "199"
// 悬浮框: 提醒订单的类型
#define REMIND_NEW_ORDER 2 // 新订单: 目前不存在case
......
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