Commit 39cee4f1 by wuyang.zou

New Feature:

1、Starbucks AB 账户折扣入机;
2、同时解耦POS 将折扣优惠另存储到一张新表;
parent db2b8a10
Pipeline #29333 failed with stage
in 0 seconds
......@@ -21,6 +21,7 @@
#include <DTools/getCaboxAReAuth.h>
#include <DTools/printCupStickPosDB.h>
#include <DTools/printMsgQueueDB.h>
#include <DTools/PrintOrderPromotionDB.h>
#include <QHostInfo>
......@@ -40,6 +41,7 @@ FlowControl::FlowControl()
m_initGetAuthPosDBRet = false;
m_initPrintCupStickPosDBRet = false;
m_initPrintMsgQueueDBRet = false;
m_initPrintOrderPromotionDBRet = false;
//初始化门店营业状态;
m_eleStoreStatus = UNKNOWNSTORE;
......@@ -95,13 +97,18 @@ FlowControl::FlowControl()
PrintMsgQueueDB::getInstance();
m_initPrintMsgQueueDBRet = PrintMsgQueueDB::getInstance().initPrintMsgQueueDB();
/***打开SqlServer POS打印订单优惠明细数据本地数据库***/
PrintOrderPromotionDB::getInstance();
m_initPrintOrderPromotionDBRet = PrintOrderPromotionDB::getInstance().initPrintOrderPromotionDB();
/***打开SqlServer POS获取 当前用户 是否绑定钱箱+是否拥有退货权限 本地数据库***/
GetCaboxAReAuth::getInstance();
m_initGetAuthPosDBRet = GetCaboxAReAuth::getInstance().initGetAuthPosDB();
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::FlowControl() m_initSimProcOrderDBRet: %1, m_initPrintSumBillPosDBRet: %2, m_initGetAuthPosDBRet:%3 ,"
"m_initPrintCupStickPosDBRet:%4, m_initPrintMsgQueueDBRet:%5 --->>>>]")
"m_initPrintCupStickPosDBRet:%4, m_initPrintMsgQueueDBRet:%5, m_initPrintOrderPromotionDBRet:%6 --->>>>]")
.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_initPrintCupStickPosDBRet?1:0).arg(m_initPrintMsgQueueDBRet?1:0).arg(m_initPrintOrderPromotionDBRet?1:0);
// FlowControl() 初始化时,接受信号的槽对象还没有实例化,所以在此时发信号没有用;
/* emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("尝试打开POS本地数据库(MMXB**)失败"));
......@@ -316,6 +323,20 @@ void FlowControl::_StoragePosOrderData() {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Product Data Failed --->>>>]").arg(order_p->id);
}
}
/***** 更新 POS本地数据库的商品数据是否成功;end:********/
/***** 更新 POS本地数据库的优惠数据 是否成功;begin:*********/
if ( PrintOrderPromotionDB::getInstance().isOrderPromotionExist(orderId) ) {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Promotion Data Had Exist --->>>>]").arg(order_p->id);
} else {
if ( PrintOrderPromotionDB::getInstance().insertOrderPromotion(order_p) ) {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Promotion Data Success--->>>>]").arg(order_p->id);
} else {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Promotion Data Failed --->>>>]").arg(order_p->id);
}
}
/***** 更新 POS本地数据库的优惠数据 是否成功;end:********/
//无法加锁,避免丢单 导致订单没有录入POS [新增一个补救添加队列也可解决此类场景];
// 不跳过入机【需要入机】 && 待入机队列中没有该订单;
if ( !m_skipRecordPos && !m_simValidOrdersList.contains( order_p->id ) ) {
......@@ -325,7 +346,6 @@ void FlowControl::_StoragePosOrderData() {
_ClickOMSAssignArea();
}
}
/***** 更新 POS本地数据库的商品数据是否成功;end:********/
m_storagePosOrdersList.removeOne(order_p->id);
m_storageOrderMutex.unlock();
......@@ -369,6 +389,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->packDiscount = 0;
orderObject->deliveryPrice = 0;
orderObject->deliveryDiscount = 0;
orderObject->tenderDeliveryDiscountB = 0;
orderObject->forwardPosStatus =0;
orderObject->negativePosStatus =0;
orderObject->businessType = "0";
......@@ -768,12 +789,13 @@ bool FlowControl::_Login()
m_remindCasherBlinkFloatTimer->start(5*1000);
//_AddOrderPull(QString(),QString());
//在登陆时再次检查数据库连接是否都正常;
if( !m_initSimProcOrderDBRet || !m_initPrintSumBillPosDBRet || !m_initGetAuthPosDBRet || !m_initPrintCupStickPosDBRet || !m_initPrintMsgQueueDBRet ) {
if( !m_initSimProcOrderDBRet || !m_initPrintSumBillPosDBRet || !m_initGetAuthPosDBRet || !m_initPrintCupStickPosDBRet || !m_initPrintMsgQueueDBRet || !m_initPrintOrderPromotionDBRet )
{
result = false;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_Login() m_initSimProcOrderDBRet: %1, m_initPrintSumBillPosDBRet: %2, m_initGetAuthPosDBRet:%3 ,"
"m_initPrintCupStickPosDBRet:%4, m_initPrintMsgQueueDBRet:%5 --->>>>]")
"m_initPrintCupStickPosDBRet:%4, m_initPrintMsgQueueDBRet:%5, m_initPrintOrderPromotionDBRet:%6 --->>>>]")
.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_initPrintCupStickPosDBRet?1:0).arg(m_initPrintMsgQueueDBRet?1:0).arg(m_initPrintOrderPromotionDBRet?1:0);
emit showAlert(AlertForm::MSGERROR, QString::fromLocal8Bit("尝试打开POS本地数据库(MMXB** 或 DataS**)失败"));
} else {
......@@ -781,14 +803,17 @@ bool FlowControl::_Login()
}
}
}
if(!result) {
QLOG_INFO() << QString("[<<<<---Login Retry--->>>>] %1 msec after login...").arg(VALUE_RELOGINTIME);
QTimer::singleShot(VALUE_RELOGINTIME, this, &FlowControl::_Login);
}
QLOG_INFO() << QString("[<<<<---Login--->>>>][m_bLoginResult:%1]")<<m_bLoginResult;
return result;
}
void FlowControl::_PullOrderData()
{
QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData ---->>>>>]";
......@@ -1518,8 +1543,9 @@ void FlowControl::_CrondClearExpireOrder()
SimProcOrderDB::getInstance().deleteOrderRecord(QDate::currentDate().addDays(-45).toString("yyyyMMdd"));
PrintCupStickPosDB::getInstance().deleteProductRecord(QDate::currentDate().addDays(-7).toString("yyyy-MM-dd"));
PrintOrderPromotionDB::getInstance().deletePromotionRecord(QDate::currentDate().addDays(-7).toString("yyyy-MM-dd"));
PrintMsgQueueDB::getInstance().deleteProductRecord(QDate::currentDate().addDays(-3).toString("yyyy-MM-dd"));
PrintMsgQueueDB::getInstance().deletePrintMsgRecord(QDate::currentDate().addDays(-3).toString("yyyy-MM-dd"));
}
bool FlowControl::_ResponseHttpRequest(const QJsonObject &content,QJsonObject &data, QString& error)
......@@ -2575,7 +2601,6 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
cObj.insert("thirdPartyOrderId","0");
}
cObj.insert("paid_trans_id",orderObject->id);
//cObj.insert("fm_id",orderObject->fm_id);
/************************************************************************************/
int hasCashbox = 0 ,hasRefundAuth = 0;
hasCashbox = GetCaboxAReAuth::getInstance().getUserHasCashBox(m_cashierId);
......@@ -2594,10 +2619,12 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
/**********************************************************************************/
for(int i=0; i < orderObject->proList.count(); i++) {
dishesObject* dish=orderObject->proList.at(i);
// promotion优惠计数器变量;
// promotion万能优惠计数器变量;
int promotionTempNo = 0;
// starPromotion 星星优惠计数器变量;
int starPromotionTempNo = 0;
// tenderBPromotion B账户优惠计数器变量;
int tenderBPromotionTempNo = 0;
// 安全检查:Sku,Qty ...:不合法直接跳过录单【①主商品属性:code中含有Default字符串(不区分大小写)+ ②code中以非数字开头 + ③商品数量是0】 直接跳过录单;
QString tempCodeLeftHead = dish->code.left(1);
if (dish->code.contains("Default",Qt::CaseInsensitive) || (tempCodeLeftHead<QString('0') || tempCodeLeftHead>QString('9'))
......@@ -2622,8 +2649,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//针对同一商品,多份数量需要将其,拆分成单份;[如果不拆分,将导致多份商品中配料价格出现 漏钱:POS中的账将会出现少金额]
// 新增 一种case: 餐具费项目需要合并, 进行不拆分 处理: qtyNoSplit
/**********************************************************************************/
if (dish->qtyNoSplit ) {
// ------> 不拆分主商品数量 --Begin ---->>>
if (dish->qtyNoSplit ) { // ------> 不拆分主商品数量 --Begin ---->>>
//声明临时栈对象: 多个主商品;
QJsonObject noSplitMainProObj;
QJsonArray noSplitSubProductArry;
......@@ -2678,24 +2704,32 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
/**********************************************************************************/
// 不拆分商品合并:优惠折扣数量默认为 1 但是整单体现是 * 主商品数量;
/**********************************************************************************/
int promotionSum = (dish->promotionQty>0 && dish->promotionQty<555)?dish->promotionQty:0;
int promotionPrice = (dish->promotionPrice>1 && dish->promotionPrice<200000)?dish->promotionPrice:0;
if( promotionSum && promotionPrice && dish->promotionSku.length() ) {
// 商品促销优惠数组存在: dish->itemsDiscount 则不会再取接口返回的 星星优惠 与 万能优惠;
if ( !dish->itemsDiscount.isEmpty() ) {
for(int m=0; m < dish->itemsDiscount.count(); m++) {
PromotionItemObject* promotionObj= dish->itemsDiscount.at(m);
if (promotionObj->promotionQty && promotionObj->discountFee && promotionObj->promotionSku.length() ) {
noSplitSubObj.insert("consume_num", 1);
noSplitSubObj.insert("pid", promotionObj->promotionSku);
noSplitSubObj.insert("original_price", promotionObj->promotionQty * promotionObj->discountFee);
noSplitSubProductArry.push_back(noSplitSubObj);
}
}
} else { // 商品促销优惠数组不存在
if( dish->promotionQty && dish->promotionPrice && dish->promotionSku.length() ) {
noSplitSubObj.insert("consume_num", 1);
noSplitSubObj.insert("pid", dish->promotionSku);
noSplitSubObj.insert("original_price", promotionSum * promotionPrice);
noSplitSubObj.insert("original_price", dish->promotionQty * dish->promotionPrice);
noSplitSubProductArry.push_back(noSplitSubObj);
}
/**********************************************************************************/
// 新增支持星星优惠; 同上万能折扣;
int starPromotionSum = (dish->starPromotionQty>0 && dish->starPromotionQty<555)?dish->starPromotionQty:0;
int starPromotionPrice = (dish->starPromotionPrice>1 && dish->starPromotionPrice<200000)?dish->starPromotionPrice:0;
if( starPromotionSum && starPromotionPrice && dish->starPromotionSku.length() ){
if( dish->starPromotionQty && dish->starPromotionPrice && dish->starPromotionSku.length() ){
noSplitSubObj.insert("consume_num", 1);
noSplitSubObj.insert("pid", dish->starPromotionSku);
noSplitSubObj.insert("original_price", starPromotionSum * starPromotionPrice);
noSplitSubObj.insert("original_price", dish->starPromotionQty * dish->starPromotionPrice);
noSplitSubProductArry.push_back(noSplitSubObj);
}
}
/**********************************************************************************/
// 汇总插入子商品[sub_products];
if(noSplitSubProductArry.size()){
......@@ -2705,8 +2739,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
products.push_back(noSplitMainProObj);
// ------> 不拆分主商品数量 --End ---->>>
} else {
// ------> 拆分主商品数量 --Begin ---->>>
} else { // ------> 拆分主商品数量 --Begin ---->>>
for (int temp_qty = 0; temp_qty < dish->qty; temp_qty++) {
//声明临时栈对象: 单个主商品 + 子商品列表 + 子商品;
QJsonObject tObj;
......@@ -2764,30 +2797,59 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
// 处理商品的优惠金额信息;针对单个商品多数量情况:需要将这部分优惠折扣金额放在前面 拆分数量的商品上[多少个折扣券,放在前几个商品上,一个上面下对应一个折扣项];
// 单项商品的折扣数量最多不超过55个(60个会导致POS死机);当个优惠价格不超2000元;
/**********************************************************************************/
int promotionSum = (dish->promotionQty>0 && dish->promotionQty<55)?dish->promotionQty:0;
int promotionPrice = (dish->promotionPrice>1 && dish->promotionPrice<200000)?dish->promotionPrice:0;
if(promotionTempNo < promotionSum){
if(promotionSum && promotionPrice && dish->promotionSku.length()){
// 商品促销优惠数组存在: dish->itemsDiscount 则不会再取接口返回的 星星优惠 与 万能优惠;
if ( !dish->itemsDiscount.isEmpty() ) {
tenderBPromotionTempNo, starPromotionTempNo ,promotionTempNo;
for(int m=0; m < dish->itemsDiscount.count(); m++) {
PromotionItemObject* promotionObj= dish->itemsDiscount.at(m);
if (promotionObj->promotionQty && promotionObj->discountFee && promotionObj->promotionSku.length() ) {
// 拆分万能优惠数量;
if ( 1 == promotionObj->type && promotionTempNo < promotionObj->promotionQty ) {
sObj.insert("consume_num", 1);
sObj.insert("pid", promotionObj->promotionSku);
sObj.insert("original_price", promotionObj->discountFee);
subProduct.push_back(sObj);
promotionTempNo++;
}
// 拆分星星优惠数量;
if ( 2 == promotionObj->type && starPromotionTempNo < promotionObj->promotionQty ) {
sObj.insert("consume_num", 1);
sObj.insert("pid", promotionObj->promotionSku);
sObj.insert("original_price", promotionObj->discountFee);
subProduct.push_back(sObj);
starPromotionTempNo++;
}
// 拆分B账户优惠数量;
if ( 3 == promotionObj->type && tenderBPromotionTempNo < promotionObj->promotionQty ) {
sObj.insert("consume_num", 1);
sObj.insert("pid", promotionObj->promotionSku);
sObj.insert("original_price", promotionObj->discountFee);
subProduct.push_back(sObj);
tenderBPromotionTempNo++;
}
}
}
} else { // 商品促销优惠数组不存在
if(promotionTempNo < dish->promotionQty){
if(dish->promotionQty && dish->promotionPrice && dish->promotionSku.length()){
sObj.insert("consume_num", 1);
sObj.insert("pid", dish->promotionSku);
sObj.insert("original_price", promotionPrice);
sObj.insert("original_price", dish->promotionPrice);
subProduct.push_back(sObj);
promotionTempNo++;
}
}
/**********************************************************************************/
// 新增支持星星优惠;
int starPromotionSum = (dish->starPromotionQty>0 && dish->starPromotionQty<55)?dish->starPromotionQty:0;
int starPromotionPrice = (dish->starPromotionPrice>1 && dish->starPromotionPrice<200000)?dish->starPromotionPrice:0;
if(starPromotionTempNo < starPromotionSum){
if(starPromotionSum && starPromotionPrice && dish->starPromotionSku.length()){
if(starPromotionTempNo < dish->starPromotionQty){
if(dish->starPromotionQty && dish->starPromotionPrice && dish->starPromotionSku.length()){
sObj.insert("consume_num", 1);
sObj.insert("pid", dish->starPromotionSku);
sObj.insert("original_price", starPromotionPrice);
sObj.insert("original_price", dish->starPromotionPrice);
subProduct.push_back(sObj);
starPromotionTempNo++;
}
}
}
/**********************************************************************************/
// 汇总插入子商品[sub_products];
if(subProduct.size()){
......@@ -2859,20 +2921,31 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//声明临时栈对象: 单个券关联商品;
QJsonObject tCoupProductObj;
tCoupProductObj.insert("couponSeq", QString::number(i+1) );
int tempQty = coupon->skus[tempSkuSeq]->qty >1 ? coupon->skus[tempSkuSeq]->qty : 1;
int tempQty = coupon->skus[tempSkuSeq]->qty ;
tCoupProductObj.insert("consume_num", tempQty);
tCoupProductObj.insert("pid", coupon->skus[tempSkuSeq]->code);
//如果单品是券menuItem: 手动将商品单价赋值为 1元 (100分);
//需要考虑 门店券 蛋糕的Combo头开始会限定后续蛋糕子项的价格后面的价格是否会都是0;
if (coupon->skus[tempSkuSeq]->isCoupon) {
tCoupProductObj.insert("original_price",100);
tCoupProductObj.insert("original_price", coupon->skus[tempSkuSeq]->price );
}else{
tCoupProductObj.insert("original_price",0);
}
products.push_back(tCoupProductObj);
//如果单品是券menuItem: 需要将券折扣挂在此券单品名下;
if(coupon->skus[tempSkuSeq]->isCoupon && coupon->discount.length() && coupon->consumeDiscountAmount){
//声明临时栈对象: 券关联折扣; 券折扣:默认不需要传券序号,得赋值给空;
if ( coupon->skus[tempSkuSeq]->isCoupon ) {
if ( !coupon->itemsDiscount.isEmpty() ) {
for(int m=0; m < coupon->itemsDiscount.count(); m++) {
PromotionItemObject* promotionObj= coupon->itemsDiscount.at(m);
if (promotionObj->promotionQty && promotionObj->discountFee && promotionObj->promotionSku.length() ) {
QJsonObject tCoupProductDiscObj;
tCoupProductDiscObj.insert("consume_num", promotionObj->promotionQty);
tCoupProductDiscObj.insert("pid", promotionObj->promotionSku);
tCoupProductDiscObj.insert("original_price", promotionObj->discountFee);
products.push_back(tCoupProductDiscObj);
}
}
} else if ( coupon->discount.length() && coupon->consumeDiscountAmount ) {
QJsonObject tCoupProductDiscObj;
tCoupProductDiscObj.insert("consume_num", 1);
tCoupProductDiscObj.insert("pid", coupon->discount);
......@@ -2880,17 +2953,6 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
products.push_back(tCoupProductDiscObj);
}
}
/*由于UPP返回的menu 是券combo,无法通过Simphony程序方式将combo正常录入POS;*/
// 此种case场景基本没有可能;
//针对蛋糕券:上面没有一个商品是 券单品【POS会自动跳出券原价】,从而也就没有将券折扣录入;需要补录【在最后录入全部商品后补录】;
if (coupon->discount.length() && ( QString("1") == coupon->couponType ) ) {
//声明临时栈对象: 券关联折扣;
QJsonObject tCakeCoupProductDiscObj;
//券折扣:默认不需要传券号,得赋值给空;
tCakeCoupProductDiscObj.insert("consume_num", 1);
tCakeCoupProductDiscObj.insert("pid", coupon->discount);
tCakeCoupProductDiscObj.insert("original_price", coupon->consumeDiscountAmount);
products.push_back(tCakeCoupProductDiscObj);
}
}
......@@ -3017,16 +3079,14 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
tPackageFeeObj.insert("original_price", 100);
products.push_back(tPackageFeeObj);
//星巴克APP/预约系统的支付方式是84; ELE的支付方式是83; [MOP不应该存在打包费且不存在包装费折扣]
if(orderObject->packDiscount>0 && 84 == tempOrderPayType){
QJsonObject tPackDiscountObj;
tPackDiscountObj.insert("consume_num", 1);
tPackDiscountObj.insert("pid","285"); //星巴克APP万能折扣码;
tPackDiscountObj.insert("original_price", orderObject->packDiscount);
products.push_back(tPackDiscountObj);
}else if(orderObject->packDiscount>0 && 83 == tempOrderPayType) {
if( orderObject->packDiscount>0 ){
QJsonObject tPackDiscountObj;
tPackDiscountObj.insert("consume_num", 1);
if ( "ELE" == orderObject->channel ) {
tPackDiscountObj.insert("pid","10400"); //ELEME万能折扣码;
} else {
tPackDiscountObj.insert("pid","285"); //星巴克APP万能折扣码;
}
tPackDiscountObj.insert("original_price", orderObject->packDiscount);
products.push_back(tPackDiscountObj);
}
......@@ -3049,18 +3109,24 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
tDeliveryFeeObj.insert("original_price", orderObject->deliveryPrice);
products.push_back(tDeliveryFeeObj);
// [MOP不应该存在配送费且不存在配送费折扣]
if(orderObject->deliveryDiscount>0 && "ELE" != orderObject->channel ){
QJsonObject tDeliveryDiscountObj;
tDeliveryDiscountObj.insert("consume_num", 1);
tDeliveryDiscountObj.insert("pid","285"); //星巴克APP万能折扣码;
tDeliveryDiscountObj.insert("original_price", orderObject->deliveryDiscount);
products.push_back(tDeliveryDiscountObj);
}else if(orderObject->deliveryDiscount>0 && "ELE" == orderObject->channel ) {
if( orderObject->deliveryDiscount>0 ){
QJsonObject tDeliveryDiscountObj;
tDeliveryDiscountObj.insert("consume_num", 1);
if ( "ELE" == orderObject->channel ){
tDeliveryDiscountObj.insert("pid","10400"); //ELEME万能折扣码;
} else {
tDeliveryDiscountObj.insert("pid","285"); //星巴克APP万能折扣码;
}
tDeliveryDiscountObj.insert("original_price", orderObject->deliveryDiscount);
products.push_back(tDeliveryDiscountObj);
// 添加B账户优惠促销金额;
if ( orderObject->tenderDeliveryDiscountB > 0 && orderObject->tenderDeliveryDiscountBSku.length() ) {
QJsonObject tDeliveryDiscountTenderBObj;
tDeliveryDiscountTenderBObj.insert("consume_num", 1);
tDeliveryDiscountTenderBObj.insert("pid",orderObject->tenderDeliveryDiscountBSku ); //B账户优惠金额;
tDeliveryDiscountTenderBObj.insert("original_price", orderObject->tenderDeliveryDiscountB);
products.push_back(tDeliveryDiscountTenderBObj);
}
}
//配送费是0元时:需录入配送费[非-MOP(销售退货),非-MOP测试; ];
} else if ( 0 == orderObject->deliveryPrice && ( "MOD"==orderObject->channel || "ELE" == orderObject->channel ) ) {
......
......@@ -165,6 +165,7 @@ private:
bool m_initGetAuthPosDBRet;
bool m_initPrintCupStickPosDBRet;
bool m_initPrintMsgQueueDBRet;
bool m_initPrintOrderPromotionDBRet;
signals:
// 发送信号给自己 做登陆
......
#include "PrintOrderPromotionDB.h"
#include "QsLog.h"
#include "alertForm.h"
#include <QDateTime>
#include "Control/flowControl.h"
#include <Model/dishesObject.h>
#include <Model/couponsObject.h>
PrintOrderPromotionDB::PrintOrderPromotionDB()
{
QLOG_INFO()<<"[<<<<---PrintOrderPromotionDB:: Structure POS Print Order Promotion INFO DataBase--->>>>]";
}
bool PrintOrderPromotionDB::initPrintOrderPromotionDB(){
bool bRetCheckColumn = false;
bool bRet = false;
m_sqlDb = QSqlDatabase::addDatabase("QODBC","PrintOrderPromotionDB"); //数据库驱动类型为SQL Server
if ( m_sqlDb.isValid() ) {
QString dsn="DRIVER={SQL SERVER};SERVER=127.0.0.1\\sqlexpress;DATABASE=MMXBenefits";
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()<<"[<<<<---PrintOrderPromotionDB::SqlServer Test Open database success!:--->>>>]";
QSqlQuery query(m_sqlDb);
QString selectsql ="select * from sys.tables where name='tb_order_promotions'" ;
if(!query.exec(selectsql)) {
QLOG_ERROR()<<"[<<<<---PrintOrderPromotionDB::SqlServer Database check tb_order_promotions failed--->>>>]"<<query.lastError().text();
}
if(query.next()) {
QLOG_INFO() << "[<<<<---PrintOrderPromotionDB::Table tb_order_promotions Has Exist--->>>>]";
bRet = true;
} else {
QLOG_INFO() << "[<<<<---PrintOrderPromotionDB::Table tb_order_promotions Does Not Exist--->>>>]";
query.prepare( QString("CREATE TABLE [dbo].[tb_order_promotions] ("
" [id] [int] IDENTITY(1,1) NOT NULL, [order_id] [varchar](50) NOT NULL, [create_datetime] [datetime] NULL,"
" [prod_seq] [int] NULL, [coupon_seq] [int] NULL,"
" [promotion_type] [int] NULL, [discount_fee] [int] NULL, [promotion_qty] [int] NULL, "
" [promotion_sku] [varchar](20) NULL, [promotion_name] [varchar](60) NULL, "
" [resv0] [int] NULL, [resv1] [int] NULL,[resv2] [int] NULL,[resv3] [int] NULL, [resv4] [int] NULL,[resv5] [int] NULL,[resv6] [varchar](60) NULL,"
" [resv7] [varchar](60) NULL, [resv8] [varchar](60) NULL, [resv9] [varchar](80) NULL, [resv10] [varchar](80) NULL,[resv11] [varchar](80) NULL,"
" [resv12] [varchar](100) NULL,[resv13] [varchar](100) NULL,[resv14] [varchar](100) NULL"
" PRIMARY KEY CLUSTERED ( [id] ASC"
")WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = "
" OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]") );
if(!query.exec()){
QLOG_ERROR()<< "[<<<<---Create Table tb_order_promotions Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
}else {
bRet = true;
}
}
m_sqlDb.close();
}
} else {
QLOG_ERROR()<<"[<<<<---SqlServer ODBC driver no valid--->>>>]";
}
// QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM TakeOut Plugin Version:2.2021.1.7 Begin check table tb_order_promotions Column--->>>>]");
bRetCheckColumn = alterTablePrintOrderPromotionAndCheck();
return bRet && bRetCheckColumn ;
}
bool PrintOrderPromotionDB::alterTablePrintOrderPromotionAndCheck() {
return true;
/*
QMutexLocker mutex(&m_mutex);
int checkSuccessNum = 0;
QSqlQuery query(m_sqlDb);
QString selectsql;
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---alterTablePrintOrderPromotionAndCheck::SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return false;
}
// Alter Table accept_name;
selectsql = "select * from syscolumns where id=object_id('tb_order_promotions') and name='accept_name'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table tb_order_promotions add accept_name varchar(400) null";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_order_promotions accept_name Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { checkSuccessNum++; }
} else { checkSuccessNum++;}
m_sqlDb.close();
if (9 == checkSuccessNum) {
QLOG_INFO()<<"[<<<<---alterTablePrintOrderPromotionAndCheck::checkSuccessNum = 9 --->>>>]";
return true;
} else {
QLOG_ERROR()<<"[<<<<---alterTablePrintOrderPromotionAndCheck::checkSuccessNum < 9 = --->>>>]"<<checkSuccessNum;
return false;
}
*/
}
PrintOrderPromotionDB &PrintOrderPromotionDB::getInstance()
{
static PrintOrderPromotionDB printOrderPromotionDB;
return printOrderPromotionDB;
}
bool PrintOrderPromotionDB::insertOrderPromotion(OrderObject* orderObj){
QMutexLocker mutex(&m_mutex);
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return false;
}
// 开启数据库事务实现原子操作: 保证 tb_order_promotions: 订单促销优惠列表 同时插入成功;
// m_sqlDb.transaction(); 驱动不支持;
QSqlQuery query(m_sqlDb);
if ( !query.exec("START TRANSACTION") ) {
QLOG_ERROR()<<"[<<<<---PrintCupStickPosDB::insertOrderPromotion: Begin transaction Failed--->>>>]"<<m_sqlDb.lastError().text();
}
bool retInsCoupProm = false;
bool retInsNorProm = false;
// WSG-杯贴祝福-商品券号关联数据;
if ( "WSG-MOD" == orderObj->channel && "4" == orderObj->platformSource ) {
retInsCoupProm = insertCouponPromotion(orderObj);
} else { // All Channel 商品关联数据;
retInsNorProm = insertNormalPromotion(orderObj);
}
// 结束数据库事务操作 保证 tb_order_promotions:父商品与子商品 同时插入成功;
// Sleep(10*1000); // test sqldb transaction
// m_sqlDb.commit() and m_sqlDb.rollback() 都是不支持的;
if ( retInsCoupProm || retInsNorProm ) {
if ( !query.exec( "COMMIT" ) ) {
QLOG_ERROR()<<"[<<<<---insertOrderProduct::insertOrderPromotion: Begin Commit Failed--->>>>]"<<m_sqlDb.lastError().text();
if ( !query.exec( "ROLLBACK" ) ) {
QLOG_ERROR()<<"[<<<<---insertOrderProduct::insertOrderPromotion: Begin Rollback Failed--->>>>]"<<m_sqlDb.lastError().text();
}
}
}
m_sqlDb.close();
return retInsCoupProm || retInsNorProm;
}
bool PrintOrderPromotionDB::insertCouponPromotion(OrderObject* orderObj) {
bool insertCoupPromSuc = true;
QSqlQuery query(m_sqlDb);
QDateTime qdaTi = QDateTime::currentDateTimeUtc();
for (int i=0; i < orderObj->coupList.count(); i++) {
CouponsObject* coupon = orderObj->coupList.at(i);
for ( int m = 0; m < coupon->itemsDiscount.count(); m++ ) {
PromotionItemObject* prom = coupon->itemsDiscount.at(m);
query.prepare("INSERT INTO tb_order_promotions(order_id, create_datetime, "
" prod_seq, coupon_seq, promotion_type, discount_fee, promotion_qty, promotion_sku, promotion_name ) "
" VALUES(?, ?, ?, ?, ?, ?, ?, ?, ? ) ");
query.addBindValue(orderObj->id); // --订单编号
query.addBindValue(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss")); // --商品入库时间
query.addBindValue(i+1); // --主商品序号;
query.addBindValue(i+1); // --券序号;
query.addBindValue( prom->type ); // --优惠类型
query.addBindValue( prom->discountFee ); // --优惠金额
query.addBindValue( prom->promotionQty ); // --优惠数量
query.addBindValue( prom->promotionSku ); // --优惠SKU
query.addBindValue( prom->promotionName ); // --优惠名称
if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database: Insert tb_order_promotions Error--->>>>]"<<query.lastError().text()<<QString::number(query.lastError().type());
QLOG_ERROR()<<QString("INSERT INTO tb_order_promotions(order_id, create_datetime, "
" prod_seq, coupon_seq, promotion_type, discount_fee, promotion_qty, promotion_sku, promotion_name ) "
"VALUES(%1, %2, %3, %4, %5, %6, %7, %8, %9 ) ").arg(orderObj->id).arg(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss"))
.arg(i+1).arg(i+1).arg(prom->type).arg(prom->discountFee).arg(prom->promotionQty).arg(prom->promotionSku).arg(prom->promotionName);
insertCoupPromSuc = false;
break;
}
}
if ( !insertCoupPromSuc )
break;
}
return insertCoupPromSuc;
}
bool PrintOrderPromotionDB::insertNormalPromotion(OrderObject* orderObj){
bool insertProdPromSuc = true;
QSqlQuery query(m_sqlDb);
QDateTime qdaTi = QDateTime::currentDateTimeUtc();
for (int i=0; i < orderObj->proList.count(); i++) {
dishesObject* dish=orderObj->proList.at(i);
for (int m=0; m < dish->itemsDiscount.count(); m++) {
PromotionItemObject* prom = dish->itemsDiscount.at(m);
query.prepare("INSERT INTO tb_order_promotions(order_id, create_datetime, "
" prod_seq, coupon_seq, promotion_type, discount_fee, promotion_qty, promotion_sku, promotion_name ) "
" VALUES(?, ?, ?, ?, ?, ?, ?, ?, ? ) ");
query.addBindValue(orderObj->id); // --订单编号
query.addBindValue(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss")); // --商品入库时间
query.addBindValue(i+1); // --主商品序号;
query.addBindValue(0); // --券序号;
query.addBindValue( prom->type ); // --优惠类型
query.addBindValue( prom->discountFee ); // --优惠金额
query.addBindValue( prom->promotionQty ); // --优惠数量
query.addBindValue( prom->promotionSku ); // --优惠SKU
query.addBindValue( prom->promotionName ); // --优惠名称
if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database: Insert tb_order_promotions Error--->>>>]"<<query.lastError().text()<<QString::number(query.lastError().type());
QLOG_ERROR()<<QString("INSERT INTO tb_order_promotions(order_id, create_datetime, "
" prod_seq, coupon_seq, promotion_type, discount_fee, promotion_qty, promotion_sku, promotion_name ) "
"VALUES(%1, %2, %3, %4, %5, %6, %7, %8, %9) ").arg(orderObj->id).arg(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss"))
.arg(i+1).arg(0).arg(prom->type).arg(prom->discountFee).arg(prom->promotionQty).arg(prom->promotionSku).arg(prom->promotionName);
insertProdPromSuc = false;
break;
}
}
if ( !insertProdPromSuc )
break;
}
// 插入配送费方面优惠: 配送费优惠 + 配送费B账户优惠;
if ( orderObj->deliveryDiscount ) {
query.prepare("INSERT INTO tb_order_promotions(order_id, create_datetime, "
" prod_seq, coupon_seq, promotion_type, discount_fee, promotion_qty, promotion_sku, promotion_name ) "
" VALUES(?, ?, ?, ?, ?, ?, ?, ?, ? ) ");
query.addBindValue(orderObj->id); // --订单编号
query.addBindValue(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss")); // --商品入库时间
query.addBindValue(0); // --主商品序号;
query.addBindValue(0); // --券序号;
query.addBindValue(1); // --优惠类型
query.addBindValue( orderObj->deliveryDiscount ); // --优惠金额
query.addBindValue( 1 ); // --优惠数量
if ( "ELE" == orderObj->channel ){
query.addBindValue( "10400" ); // --优惠SKU
}else {
query.addBindValue( "285" ); // --优惠SKU
}
query.addBindValue( "DeliveryFeeDiscount" ); // --优惠名称
if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database: Insert tb_order_promotions Error--->>>>]"<<query.lastError().text()<<QString::number(query.lastError().type());
insertProdPromSuc = false;
}
}
if ( orderObj->tenderDeliveryDiscountB ) {
query.prepare("INSERT INTO tb_order_promotions(order_id, create_datetime, "
" prod_seq, coupon_seq, promotion_type, discount_fee, promotion_qty, promotion_sku, promotion_name ) "
" VALUES(?, ?, ?, ?, ?, ?, ?, ?, ? ) ");
query.addBindValue(orderObj->id); // --订单编号
query.addBindValue(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss")); // --商品入库时间
query.addBindValue(0); // --主商品序号;
query.addBindValue(0); // --券序号;
query.addBindValue(3); // --优惠类型
query.addBindValue( orderObj->tenderDeliveryDiscountB ); // --优惠金额
query.addBindValue( 1 ); // --优惠数量
query.addBindValue( orderObj->tenderDeliveryDiscountBSku ); // --优惠SKU
query.addBindValue( "DeliveryFeeTenderBDiscount" ); // --优惠名称
if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database: Insert tb_order_promotions Error--->>>>]"<<query.lastError().text()<<QString::number(query.lastError().type());
insertProdPromSuc = false;
}
}
return insertProdPromSuc;
}
bool PrintOrderPromotionDB::isOrderPromotionExist( const QString& orderId ) {
QMutexLocker mutex(&m_mutex);
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return false;
}
bool result;
QSqlQuery query(m_sqlDb);
query.prepare(QString("select order_id from tb_order_promotions where order_id='%1' ").arg(orderId) );
if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database:: isOrderPromotionExist--->>>>]"<<orderId<<query.lastError().text();
result= false;
}
if(query.first()) {
result= true;
} else {
result = false;
}
m_sqlDb.close();
return result;
}
bool PrintOrderPromotionDB::deletePromotionRecord(QString creatTime)
{
bool retTryLock = m_mutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
if(!retTryLock){
QLOG_ERROR()<<"[<<<<---PrintOrderPromotionDB::deletePromotionRecord Try Lock Failed--->>>>]";
return false;
}
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---PrintOrderPromotionDB::deletePromotionRecord Open Failed--->>>>]"<<m_sqlDb.lastError().text();
m_mutex.unlock();
return false;
}
bool result=true;
QLOG_INFO()<<QString("[<<<<---PrintOrderPromotionDB::begin deletePromotionRecord create_datetime: %1--->>>>]").arg(creatTime);
QSqlQuery query(m_sqlDb);
query.prepare(QString("delete from tb_order_promotions where create_datetime<'%1'").arg(creatTime));
if(!query.exec()) {
QLOG_ERROR()<<query.lastError().text()<<__FUNCTION__;
result= false;
}
m_sqlDb.close();
m_mutex.unlock();
return result;
}
bool PrintOrderPromotionDB::queryValue(const QString& orderId, const QString& key, QString& error, QVariant &value){
QMutexLocker mutex(&m_mutex);
if(!m_sqlDb.open()) {
error.append(QString("SqlServer Database:Open Failed").append(m_sqlDb.lastError().text()));
return false;
}
QSqlQuery query(m_sqlDb);
query.prepare(QString("select %1 from tb_order_promotions where order_id='%1'").arg(key).arg(orderId));
if(!query.exec()) {
error.append(query.lastError().text());
m_sqlDb.close();
return false;
} else {
while(query.next()) {
value= query.value(0);
}
}
m_sqlDb.close();
return true;
}
bool PrintOrderPromotionDB::queryIsNull(const QString &orderId, const QString& key,QString &error, bool &result){
QMutexLocker mutex(&m_mutex);
if(!m_sqlDb.open()) {
error.append(QString("SqlServer Database:Open Failed").append(m_sqlDb.lastError().text()));
return false;
}
QSqlQuery query(m_sqlDb);
query.prepare(QString("select %1 from tb_order_promotions where order_id=%2 and %3 is null").arg(orderId,orderId,key));
if(!query.exec()) {
error.append(query.lastError().text());
m_sqlDb.close();
return false;
} else {
if(query.first()) {
result= true;
} else{
result = false;
}
}
m_sqlDb.close();
return true;
}
#ifndef PRINTORDERPROMOTIONDB_H
#define PRINTORDERPROMOTIONDB_H
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QObject>
#include <QMutex>
#include <Model/orderObject.h>
#include "preDefine.h"
#include "windows.h"
class PrintOrderPromotionDB : public QObject
{
Q_OBJECT
public:
// explicit PrintOrderPromotionDB(QObject *parent = 0);
static PrintOrderPromotionDB& getInstance();
/**
*功能:初始化pos本地数据库;方便后期判断 打开pos本地数据库是否成功;
*参数:[无]
*返回:true:能够成功打开POS本地数据库,false:不能够成功打开POS本地数据库
**/
bool initPrintOrderPromotionDB();
/**
*功能:检查pos本地数据库表中字段;
*参数:[无]
*返回:true:检查字段完整性成功,false:检查字段完整性失败
**/
bool alterTablePrintOrderPromotionAndCheck();
/**
*功能:插入 订单优惠列表 到pos本地数据库中;
*参数:[1]订单对象指针
*返回:true操作成功,false失败
**/
bool insertOrderPromotion(OrderObject* orderObj);
/**
*功能:插入订单 券 优惠列表到pos本地数据库中;
*参数:[1]订单对象指针
*返回:true操作成功,false失败
**/
bool insertCouponPromotion(OrderObject* orderObj);
/**
*功能:插入订单 正常商品 优惠列表到pos本地数据库中;
*参数:[1]订单对象指针
*返回:true操作成功,false失败
**/
bool insertNormalPromotion(OrderObject* orderObj);
/**
*功能:查询 订单的优惠数据是否存在本地的POS系统中;
*参数:[1]订单号
*返回:true是,false否
**/
bool isOrderPromotionExist(const QString& orderId);
/**
*功能:删除本地数据库中的 订单优惠数据;
*参数:[1] 删除日期;
*返回:true 删除成功,false 删除失败;
**/
bool deletePromotionRecord(QString creatTime);
bool queryValue(const QString& orderId, const QString& key, QString& error, QVariant &value);
bool queryIsNull(const QString &orderId, const QString& key,QString &error, bool &result);
private:
QMutex m_mutex;
PrintOrderPromotionDB();
PrintOrderPromotionDB(PrintOrderPromotionDB const&);
PrintOrderPromotionDB& operator=(PrintOrderPromotionDB const&);
QSqlDatabase m_sqlDb;
signals:
public slots:
};
#endif // PRINTORDERPROMOTIONDB_H
......@@ -126,6 +126,14 @@ bool PrintCupStickPosDB::insertOrderProduct(OrderObject* orderObj,const QString&
QLOG_ERROR()<<"[<<<<---SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return false;
}
// 开启数据库事务实现原子操作: 保证 tb_main_prod_refinfo:父商品与子商品 同时插入成功;
// m_sqlDb.transaction(); 驱动不支持;
QSqlQuery query(m_sqlDb);
if ( !query.exec("START TRANSACTION") ) {
QLOG_ERROR()<<"[<<<<---PrintCupStickPosDB::insertOrderProduct: Begin transaction Failed--->>>>]"<<m_sqlDb.lastError().text();
}
bool retInsCoupProd = false;
bool retInsNorProd = false;
// WSG-杯贴祝福-商品券号关联数据;
......@@ -135,6 +143,18 @@ bool PrintCupStickPosDB::insertOrderProduct(OrderObject* orderObj,const QString&
retInsNorProd = insertNormalProd(orderObj, posCheckNo);
}
// 结束数据库事务操作 保证 tb_main_prod_refinfo:父商品与子商品 同时插入成功;
// Sleep(10*1000); // test sqldb transaction
// m_sqlDb.commit() and m_sqlDb.rollback() 都是不支持的;
if ( retInsCoupProd || retInsNorProd ) {
if ( !query.exec( "COMMIT" ) ) {
QLOG_ERROR()<<"[<<<<---insertOrderProduct::insertOrderProduct: Begin Commit Failed--->>>>]"<<m_sqlDb.lastError().text();
if ( !query.exec( "ROLLBACK" ) ) {
QLOG_ERROR()<<"[<<<<---insertOrderProduct::insertOrderProduct: Begin Rollback Failed--->>>>]"<<m_sqlDb.lastError().text();
}
}
}
m_sqlDb.close();
return retInsCoupProd || retInsNorProd;
}
......
......@@ -203,7 +203,7 @@ bool PrintMsgQueueDB::isOrderPrtMsgExist(const QString& orderId){
return result;
}
bool PrintMsgQueueDB::deleteProductRecord(QString creatTime)
bool PrintMsgQueueDB::deletePrintMsgRecord(QString creatTime)
{
//QMutexLocker mutex(&m_mutex);
bool retTryLock = m_mutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
......
......@@ -60,7 +60,7 @@ public:
*参数:[1] 删除日期;
*返回:true 删除成功,false 删除失败;
**/
bool deleteProductRecord(QString creatTime);
bool deletePrintMsgRecord(QString creatTime);
private:
QMutex m_mutex;
......
#include "PromotionItemObject.h"
PromotionItemObject::PromotionItemObject(const PromotionItemObject &promotionItem, QObject *parent):QObject(parent)
{
const QMetaObject *m = promotionItem.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
QMetaProperty qmp = m->property(i);
QString key = QString::fromLatin1(qmp.name());
QVariant value = promotionItem.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
}
PromotionItemObject& PromotionItemObject::operator =(const PromotionItemObject& promotionItem)
{
const QMetaObject *m = promotionItem.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
QMetaProperty qmp = m->property(i);
QString key = QString::fromLatin1(qmp.name());
QVariant value = promotionItem.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
return *this;
}
void PromotionItemObject::FetchDataFromJson(const QJsonObject &json)
{
foreach(QString key, json.keys())
{
setProperty(key.toUtf8(), json[key].toVariant());
}
return;
}
#ifndef PROMOTIONITEMOBJECT_H
#define PROMOTIONITEMOBJECT_H
#include <QObject>
#include <QJsonObject>
#include <QVariant>
#include <QMetaProperty>
class PromotionItemObject : public QObject
{
Q_OBJECT
Q_PROPERTY (QString promotionSku READ getPromotionSku WRITE setPromotionSku)
Q_PROPERTY (QString promotionName READ getPromotionName WRITE setPromotionName)
Q_PROPERTY (int promotionQty READ getPromotionQty WRITE setPromotionQty)
Q_PROPERTY (int discountFee READ getDiscountFee WRITE setDiscountFee)
Q_PROPERTY (int type READ getType WRITE setType)
public:
explicit PromotionItemObject(QObject *parent = 0):QObject(parent){}
PromotionItemObject(const PromotionItemObject& promotionItem,QObject* parent=0);
PromotionItemObject& operator =(const PromotionItemObject& promotionItem);
void FetchDataFromJson(const QJsonObject &json);
QString promotionSku;
QString promotionName;
int promotionQty;
int discountFee;
int type; // 1:万能优惠 2:星星优惠 3:B账号优惠;
protected:
inline QString getPromotionSku(){ return promotionSku; }
inline void setPromotionSku(const QString& v){ promotionSku = v; }
inline QString getPromotionName(){ return promotionName; }
inline void setPromotionName(const QString& v){ promotionName = v; }
inline int getPromotionQty(){ return promotionQty; }
inline void setPromotionQty(const int& v){ promotionQty = v; }
inline int getDiscountFee(){ return discountFee; }
inline void setDiscountFee(const int& v){ discountFee = v; }
inline int getType(){ return type; }
inline void setType(const int& v){ type = v; }
};
#endif // PROMOTIONITEMOBJECT_H
......@@ -7,6 +7,10 @@ CouponsObject::CouponsObject(const CouponsObject &coupons, QObject *parent):QObj
{
qDeleteAll(skus);
skus.clear();
qDeleteAll(itemsDiscount);
itemsDiscount.clear();
const QMetaObject *m = coupons.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
......@@ -15,16 +19,27 @@ CouponsObject::CouponsObject(const CouponsObject &coupons, QObject *parent):QObj
QVariant value = coupons.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
foreach (auto ptr, coupons.skus) {
SingleProductObject *singleProduct=new SingleProductObject(*ptr,this);
this->skus.append(singleProduct);
}
foreach (auto ptr, coupons.itemsDiscount) {
PromotionItemObject *promotionItem=new PromotionItemObject(*ptr,this);
this->itemsDiscount.append(promotionItem);
}
}
CouponsObject& CouponsObject::operator =(const CouponsObject& coupons)
{
qDeleteAll(skus);
skus.clear();
qDeleteAll(itemsDiscount);
itemsDiscount.clear();
const QMetaObject *m = coupons.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
......@@ -33,10 +48,17 @@ CouponsObject& CouponsObject::operator =(const CouponsObject& coupons)
QVariant value = coupons.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
foreach (auto ptr, coupons.skus) {
SingleProductObject *singleProduct=new SingleProductObject(*ptr,this);
this->skus.append(singleProduct);
}
foreach (auto ptr, coupons.itemsDiscount) {
PromotionItemObject *promotionItem=new PromotionItemObject(*ptr,this);
this->itemsDiscount.append(promotionItem);
}
return *this;
}
......@@ -49,6 +71,10 @@ void CouponsObject::FetchDataFromJson(const QJsonObject &json)
qDeleteAll(skus);
skus.clear();
qDeleteAll(itemsDiscount);
itemsDiscount.clear();
QJsonArray singleProductsArray = json[JSON_COUPONPRODUCTS].toArray();
foreach(QJsonValue singleProduct, singleProductsArray)
{
......@@ -61,5 +87,20 @@ void CouponsObject::FetchDataFromJson(const QJsonObject &json)
item->FetchDataFromJson(singleProduct.toObject());
this->skus.append(item);
}
QJsonArray itemsDiscountArray = json[JSON_ITEMSDISCOUNT].toArray();
foreach(QJsonValue itemDiscount, itemsDiscountArray)
{
PromotionItemObject *item = new PromotionItemObject(this);
//初始商品配料数据信息;
item->promotionSku="";
item->promotionName="";
item->promotionQty=0;
item->discountFee=0;
item->type=0;
item->FetchDataFromJson(itemDiscount.toObject());
itemsDiscount.append(item);
}
return;
}
......@@ -6,6 +6,8 @@
#include <QVariant>
#include <QMetaProperty>
#include <Model/singleProductObject.h>
#include <Model/PromotionItemObject.h>
class CouponsObject : public QObject
{
Q_OBJECT
......@@ -49,6 +51,7 @@ public:
QString blessingWords ; //券赠送祝福
QList<SingleProductObject*> skus;
QList<PromotionItemObject*> itemsDiscount;
protected:
inline QString getCouponSeq(){ return couponSeq; }
......
......@@ -7,6 +7,10 @@ dishesObject::dishesObject(const dishesObject &dish, QObject *parent):QObject(pa
{
qDeleteAll(sub_products);
sub_products.clear();
qDeleteAll(itemsDiscount);
itemsDiscount.clear();
const QMetaObject *m = dish.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
......@@ -15,16 +19,27 @@ dishesObject::dishesObject(const dishesObject &dish, QObject *parent):QObject(pa
QVariant value = dish.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
foreach (auto ptr, dish.sub_products) {
dishesObject *product=new dishesObject(*ptr,this);
this->sub_products.append(product);
}
foreach (auto ptr, dish.itemsDiscount) {
PromotionItemObject *promotionItem=new PromotionItemObject(*ptr,this);
this->itemsDiscount.append(promotionItem);
}
}
dishesObject& dishesObject::operator =(const dishesObject& dish)
{
qDeleteAll(sub_products);
sub_products.clear();
qDeleteAll(itemsDiscount);
itemsDiscount.clear();
const QMetaObject *m = dish.metaObject();
for( int i=m->propertyOffset(); i<m->propertyCount(); i++)
{
......@@ -33,10 +48,17 @@ dishesObject& dishesObject::operator =(const dishesObject& dish)
QVariant value = dish.property(key.toUtf8());
this->setProperty(key.toUtf8(), value);
}
foreach (auto ptr, dish.sub_products) {
dishesObject *product=new dishesObject(*ptr,this);
this->sub_products.append(product);
}
foreach (auto ptr, dish.itemsDiscount) {
PromotionItemObject *promotionItem=new PromotionItemObject(*ptr,this);
this->itemsDiscount.append(promotionItem);
}
return *this;
}
......@@ -49,6 +71,10 @@ void dishesObject::FetchDataFromJson(const QJsonObject &json)
qDeleteAll(sub_products);
sub_products.clear();
qDeleteAll(itemsDiscount);
itemsDiscount.clear();
QJsonArray subDishesArray = json[JSON_SUBPRODUCTS].toArray();
foreach(QJsonValue subDish, subDishesArray)
{
......@@ -63,5 +89,20 @@ void dishesObject::FetchDataFromJson(const QJsonObject &json)
item->FetchDataFromJson(subDish.toObject());
sub_products.append(item);
}
QJsonArray itemsDiscountArray = json[JSON_ITEMSDISCOUNT].toArray();
foreach(QJsonValue itemDiscount, itemsDiscountArray)
{
PromotionItemObject *item = new PromotionItemObject(this);
//初始商品配料数据信息;
item->promotionSku="";
item->promotionName="";
item->promotionQty=0;
item->discountFee=0;
item->type=0;
item->FetchDataFromJson(itemDiscount.toObject());
itemsDiscount.append(item);
}
return;
}
......@@ -4,6 +4,8 @@
#include <QJsonObject>
#include <QVariant>
#include <QMetaProperty>
#include <Model/PromotionItemObject.h>
class dishesObject : public QObject
{
Q_OBJECT
......@@ -72,6 +74,7 @@ public:
QString chgPrcFlgCode;
QList<dishesObject*> sub_products;
QList<PromotionItemObject*> itemsDiscount;
protected:
inline QString getCouponSeq(){ return couponSeq; }
......
......@@ -91,6 +91,9 @@ class OrderObject : public QObject
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 globalServiceType READ getGlobalServiceType WRITE setGlobalServiceType)
Q_PROPERTY (int globalOrderType READ getGlobalOrderType WRITE setGlobalOrderType)
......@@ -199,6 +202,9 @@ public:
int inAdvanceTakemeal; // 预约单提前到店标志【新增字段:int】
QString subStoreId; // 子门店号 【新增字段:string】
int tenderDeliveryDiscountB; // 配送费 B账户优惠金额
QString tenderDeliveryDiscountBSku; // 配送费 B账户优惠SKU;
int globalServiceType; // 全链路服务类型: globalServiceType【新增字段:int】
int globalOrderType; // 全链路订单类型: globalOrderType 【新增字段:int】
......@@ -460,6 +466,12 @@ public:
inline QString getSubStoreId()const{return subStoreId;}
inline void setSubStoreId(const QString& v){subStoreId = v;}
inline int getTenderDeliveryDiscountB()const{return tenderDeliveryDiscountB;}
inline void setTenderDeliveryDiscountB(const int& v){tenderDeliveryDiscountB = v;}
inline QString getTenderDeliveryDiscountBSku()const{return tenderDeliveryDiscountBSku;}
inline void setTenderDeliveryDiscountBSku(const QString& v){tenderDeliveryDiscountBSku = v;}
inline int getGlobalServiceType()const{return globalServiceType;}
inline void setGlobalServiceType(const int& v){globalServiceType = v;}
......
......@@ -61,7 +61,9 @@ SOURCES += main.cpp\
Model/singleProductObject.cpp \
Model/paymentObject.cpp \
DTools/printCupStickPosDB.cpp \
DTools/printMsgQueueDB.cpp
DTools/printMsgQueueDB.cpp \
Model/PromotionItemObject.cpp \
DTools/PrintOrderPromotionDB.cpp
HEADERS += \
mainForm.h \
......@@ -101,7 +103,9 @@ HEADERS += \
Model/singleProductObject.h \
Model/paymentObject.h \
DTools/printCupStickPosDB.h \
DTools/printMsgQueueDB.h
DTools/printMsgQueueDB.h \
Model/PromotionItemObject.h \
DTools/PrintOrderPromotionDB.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,2020,12,18
PRODUCTVERSION 2,2020,12,18
FILEVERSION 2,2021,1,11
PRODUCTVERSION 2,2021,1,11
//*************************************************************************//
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.2020.12.18"
VALUE "FileVersion", "2.2020.12.18"
VALUE "ProductVersion", "2.2021.1.11"
VALUE "FileVersion", "2.2021.1.11"
//*************************************************************************//
END
END
......
......@@ -31,8 +31,8 @@
//#define APP_VERSION "2.2020.8.10"
//#define APP_VERSION "2.2020.9.29"
//#define APP_VERSION "2.2020.10.27"
#define APP_VERSION "2.2020.12.18"
//#define APP_VERSION "2.2020.12.18"
#define APP_VERSION "2.2021.1.11"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
......@@ -126,6 +126,7 @@
#define JSON_EXCHANGECOUPONS "exchangeCoupons"
#define JSON_PAYMENTS "PaymentObjs"
#define JSON_SUBPRODUCTS "addExtra"
#define JSON_ITEMSDISCOUNT "itemsDiscount"
#define JSON_COUPONPRODUCTS "skus"
#define JSON_ID "id"
#define JSON_ORDERID "orderId"
......
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