Commit 13467eb2 by wuyang.zou

POS插件

<1> 插件存储 totalPriceForPos 字段给 POS进行打印汇总单 付款 字段;
<2> 插件针对 权益单需 跳过打印,但是需要汇报给上游系统 入机存储成功;
<3> 插件针对 销售单未入机,退货单已来,仍然需要汇报给 上游系统 入机存储成功;
<4> 插件针对 非onePos 模式 是否 需要实现自动登录功能【等待业务确认】;
<5> 插件针对 食品包装???【等待业务确认】;

Version: 2.2023.2.23
parent f35df15f
Pipeline #42350 failed with stage
in 0 seconds
......@@ -604,7 +604,7 @@ void FlowControl::_StoragePosOrderData() {
/***** 更新 POS本地数据库的打印消息数据 是否成功;end:********/
// 订单落库成功后.判断是否需要入机; ①不入机则汇报OMS落库成功; ②入机则有效不重复添加到待入机队列中;
QString requestType = order_p->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
QString requestType = order_p->orderStatus==6?QString("6"):QString("3");
if ( order_p->decouplePosVersion >= 20 || m_hurryPrintSum ) {
// 2.0解耦POS->不入机流程分支: 需要在此处进行数据校验 是否都存储成功 / 并汇报存储情况;
......@@ -872,6 +872,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->skipPrint = false;
orderObject->privacyPhone = "";
orderObject->backupPosFlag = m_backupPosFlag;
orderObject->totalPriceForPos = 0;
orderObject->FromJson(jsonObject);
......@@ -891,6 +892,11 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->dataBaseIsORSCancleInt = 0;
orderObject->dataBasePosOrderCheckNo = "";
// 89 == orderType 标识订单是 ELE-权益卡单,需存储(为了给OMS上游提供入机回调) 但是无需打印 且 需要界面展示;
if ( 89 == orderObject->orderType ) {
orderObject->skipPrint = true;
}
//插件程序内存中没有此订单时需要从数据库中获取该订单标志数据;同时在接受到退单情况时,也需要从数据库中重新获取(防止内存中标志数据未更新[入机后未更新]);
bool retGetDbOrderAllFlag = SimProcOrderDB::getInstance().getDbOrderAllFlag(orderObject->id,orderObject->dataBaseIsOrderExistInt,orderObject->dataBaseIsPushInt,
orderObject->dataBaseIsCancleInt,orderObject->dataBaseIsORSPushInt,orderObject->dataBaseIsORSCancleInt,orderObject->dataBasePosOrderCheckNo);
......@@ -960,6 +966,11 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
emit changeOrderStatus(orderObject, oldStatus);
}
// 89 == orderType 标识订单是 ELE-权益卡单,需存储(为了给OMS上游提供入机回调) 但是无需打印 且 需要界面展示;
if ( 89 == orderObject->orderType ) {
orderObject->skipPrint = true;
}
// 3: 刷新订单 预约时间 & 制作时间 & 街送小票时间;
if ( 3 == orderObject->inAdvanceTakemeal || oldArriveAhead != orderObject->inAdvanceTakemeal ) {
int updateOrderRet = PrintSumBillPosDB::getInstance().updateOrderDataToDB(orderObject, QString("UpdateTimeAction"));
......@@ -1108,6 +1119,14 @@ void FlowControl::_analysisRefundOrderTask(OrderObject* orderObject) {
return;
}
// 特殊场景: 针对销售单没有正常存储, 此时订单被退单取消, 插件也需要将订单取消正常汇报给上游系统 O2O-FULFULLMENT / OMS;
if (1) {
QString posCheckNo = orderObject->id.right(5) + QString("06");
QString errorStorageOrderMsg = QString("Decouple Pos: OrderId: %1 Storage Pos Local DB Success (No Sale Order Record)").arg(orderObject->id);
// 销售单/退货单: 会根据订单状态 是否 = 6 进行转换后进行汇报; 进入此队列 m_storagePosOrdersList 的次数决定汇报的次数;
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel, "6", "3", posCheckNo, errorStorageOrderMsg, QString("") );
}
bRetStorageOrderMutex = m_storageOrderMutex.tryLock(VALUE_TRYLOCKMEMTIMEOUT);
if ( !bRetStorageOrderMutex ) {
QLOG_INFO() << QString("[<<<<---_analysisRefundOrderTask:: orderId: %1 m_storageOrderMutex.tryLock Failed --->>>>]").arg(orderObject->id);
......@@ -1369,7 +1388,6 @@ void FlowControl::_PullOrderData()
return;
emit hideAlert();
QLOG_INFO()<<QString("[<<<<----_PullOrderData ListSize=%1, FirstOne: %2 ---->>>>>]").arg( m_orderPullList.size() ).arg( m_orderPullList.size()?m_orderPullList.first()->orderId:"" );
bool btryLock = m_PullOrderDataMutex.tryLock(VALUE_TRYLOCKNETTIMEOUT);
......@@ -1902,7 +1920,7 @@ void FlowControl::_ReportOMSRecordOrderInfo()
sendJson.insert(JSON_POS_WORKS_NUM, m_posWorkstationNum);
sendJson.insert(JSON_POS_HOST_NAME, m_posHostName);
sendJson.insert(JSON_POS_MAC_ADDRESS, m_posMacAddress);
sendJson.insert(JSON_POS_PLUGIN_VERSION, RepOMSRecOrderIn->posPluginVersion);
sendJson.insert(JSON_POS_PLUGIN_VERSION, RepOMSRecOrderIn->pluginVersion);
sendJson.insert(JSON_TCP_DEVICE_TYPE , "posPlugin");
sendJson.insert(JSON_POS_BACKUP_PC, m_backupPosFlag);
......@@ -2034,7 +2052,7 @@ void FlowControl::_AddOrUpdateReportOmsList(const QString &orderId, const QStri
repOMSRecordOrder->remark = error;
repOMSRecordOrder->failCode = errorCode;
repOMSRecordOrder->checkNo = chkNum;
repOMSRecordOrder->posPluginVersion = APP_VERSION;
repOMSRecordOrder->pluginVersion = APP_VERSION;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_AddOrUpdateReportOmsList:m_orderRecordRepOMSList.append() orderId:%1 error:%2--->>>>]").arg(orderId).arg(error);
m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock();
......
......@@ -118,7 +118,7 @@ private:
QString remark; //备注:入机出错信息
QString checkNo; //小票号:入机成功时的小票号;
QString failCode; // 入机/存储 错误码 (成功时都给 "");
QString posPluginVersion; //该订单入机后, 汇报给OMS对应程序的版本号;
QString pluginVersion; //该订单入机后, 汇报给OMS对应程序的版本号;
int reqResult; //向OMS请求汇报结果;
} RepOMSRecordOrderInfo;
......
......@@ -851,9 +851,9 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
" pay_way, customer_id, customer_name, msr_no, store_id, sub_store_id, store_name, store_address, is_package, order_discount, total_price, "
" orderPayType, sbkAppPayType, sbkAppPayValue, sbkAppRefundPayValue, orderTransFlowNo, orderRefundTransFlowNo, "
" pluginVersion, packageSku, thirdPartyOrderId, discountShopFee, packFee, packDiscount, deliveryFee, deliveryDiscount, "
" reserve8, reserve9, reserve10, reserve11, reserve12, reserve22, reserve23, reserve24 ) "
" reserve8, reserve9, reserve10, reserve11, reserve12, reserve22, reserve23, reserve24, reserve25 ) "
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "
" ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" );
" ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" );
query.addBindValue(posCheckNo.toInt()); // --小票号
query.addBindValue(orderObj->lastName); // --顾客-姓
query.addBindValue(orderObj->consigneeName); // --顾客-全名
......@@ -971,6 +971,11 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
query.addBindValue(orderObj->extendType); // 扩展类型: 20: MOD PLUS 渠道;
query.addBindValue(orderObj->deliveryProvider); // 配送商家类型: 1:蜂鸟 2:美团;
query.addBindValue(orderObj->deliveryType); // 配送方式: 1: 二轮车 2: 四轮车 3: 美团无人机;
if ( orderObj->decouplePosVersion>= 20 && OrderObject::Refunded == orderObj->orderStatus ) {
query.addBindValue( 0 - orderObj->totalPriceForPos); // OMS 计算好 汇总小票打印的 total price 金额【扣减: 改价商品后仍有优惠分摊金额 场景】【upp卡B账户优惠金额】
} else {
query.addBindValue( orderObj->totalPriceForPos); // OMS 计算好 汇总小票打印的 total price 金额【扣减: 改价商品后仍有优惠分摊金额 场景】【upp卡B账户优惠金额】
}
QLOG_INFO()<<QString("[<<<--PrintSumBillPosDB::insertOrderSumBill waybillId:%1-->>>>]").arg((orderObj->waybillId).length()?orderObj->waybillId:QString("0"));
......@@ -986,10 +991,10 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
" pay_way, customer_id, customer_name, msr_no, store_id, sub_store_id, store_name, store_address, is_package, order_discount, total_price"
" orderPayType, sbkAppPayType, sbkAppPayValue, sbkAppRefundPayValue, orderTransFlowNo, orderRefundTransFlowNo, "
" pluginVersion, packageSku, thirdPartyOrderId, discountShopFee, packFee, packDiscount, deliveryFee, deliveryDiscount, "
" reserve8, reserve9, reserve10, reserve11, reserve12, reserve22, reserve23, reserve24 ) "
" reserve8, reserve9, reserve10, reserve11, reserve12, reserve22, reserve23, reserve24, reserve25 ) "
"VALUES(%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17, %18,"
" %19, %20, %21, %22, %23, %24, %25, %26, %27, %28, %29, %30,%31, %32, %33, %34, %35, %36, %37, %38, %39, %40, %41, %42"
" %43, %44, %45, %46, %47, %48, %49, %50,%51, %52, %53, %54, %55, %56, %57, %58, %59, %60, %61, %62, %63, %64, %65 )")
" %43, %44, %45, %46, %47, %48, %49, %50,%51, %52, %53, %54, %55, %56, %57, %58, %59, %60, %61, %62, %63, %64, %65, %66 )")
.arg(posCheckNo.toInt())
.arg(orderObj->lastName).arg(orderObj->customerName).arg(temp_customerSex)
.arg(0).arg(qdaTi.addSecs(60*60*8).toString("yyyy-MM-dd hh:mm:ss")).arg(FlowControl::GetInstance()._GetCashierId()).arg("").arg("")
......@@ -1008,7 +1013,7 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
.arg(orderObj->packDiscount).arg(orderObj->deliveryPrice).arg(orderObj->deliveryDiscount)
.arg(orderObj->carNumber).arg(orderObj->privacyPhone).arg(orderObj->remindTicketTime)
.arg(orderObj->carColor).arg(orderObj->carBrandModel)
.arg(orderObj->extendType).arg(orderObj->deliveryProvider).arg(orderObj->deliveryType);
.arg(orderObj->extendType).arg(orderObj->deliveryProvider).arg(orderObj->deliveryType).arg(orderObj->totalPriceForPos);
} else {
QLOG_INFO()<<QString("[<<<<---SqlServer Database:Insert OrderId %1 Into tb_msr_customer_info Success--->>>>]").arg(orderObj->id);
result = true;
......
......@@ -259,6 +259,8 @@ QString OrderObject::getChannelName()
return QString::fromLocal8Bit("预-MOD-隔日");
}else if ( 8 == orderType ) {
return QString::fromLocal8Bit("拼-MOD");
}else if ( 89 == orderType ) {
return QString::fromLocal8Bit("权益卡");
} else {
if ( "4" == platformSource ) {
return QString::fromLocal8Bit("微信-MOD");
......@@ -272,6 +274,8 @@ QString OrderObject::getChannelName()
return QString::fromLocal8Bit("预-美团-当日");
} else if ( 11 == orderType ) {
return QString::fromLocal8Bit("预-美团-隔日");
} else if ( 89 == orderType ) {
return QString::fromLocal8Bit("权益卡");
} else {
return QString::fromLocal8Bit("美团-MOD");
}
......@@ -295,6 +299,8 @@ QString OrderObject::getChannelName()
return QString::fromLocal8Bit("预-饿了么-当日");
} else if ( 11 == orderType ) {
return QString::fromLocal8Bit("预-饿了么-隔日");
} else if ( 89 == orderType ) {
return QString::fromLocal8Bit("权益卡");
} else {
return QString::fromLocal8Bit("饿了么");
}
......@@ -311,6 +317,8 @@ QString OrderObject::getChannelName()
return QString::fromLocal8Bit("预-MOP-隔日");
} else if ( 8 == orderType ) {
return QString::fromLocal8Bit("拼-MOP");
} else if ( 89 == orderType ) {
return QString::fromLocal8Bit("权益卡");
} else if (10 == orderType) {
return QString::fromLocal8Bit("星时刻");
} else {
......@@ -328,13 +336,15 @@ QString OrderObject::getChannelName()
return QString::fromLocal8Bit("预-美团-当日");
} else if ( 11 == orderType ) {
return QString::fromLocal8Bit("预-美团-隔日");
} else if ( 89 == orderType ) {
return QString::fromLocal8Bit("权益卡");
} else {
return QString::fromLocal8Bit("美团-MOP");
}
} else if ( "EC-MOP" == channel || "EC_WECHAT_MOP" == channel ) {
return QString::fromLocal8Bit("电商MOP");
} else{
} else {
return QString::fromLocal8Bit("未知");
}
......
......@@ -114,6 +114,8 @@ class OrderObject : public QObject
Q_PROPERTY (QString callBackUrl READ getCallBackUrl WRITE setCallBackUrl)
Q_PROPERTY (bool skipPrint READ getSkipPrint WRITE setSkipPrint)
Q_PROPERTY (QJsonObject pluginOptions READ getPluginOptions WRITE setPluginOptions)
Q_PROPERTY (int totalPriceForPos READ getTotalPriceForPos WRITE setTotalPriceForPos )
public:
OrderObject(QObject *parent=0)
......@@ -294,6 +296,7 @@ public:
QString sbkAppPayValue;
QString sbkAppRefundPayValue;
bool backupPosFlag;
int totalPriceForPos;
QString getChannelName();
......@@ -584,6 +587,9 @@ public:
inline QJsonObject getPluginOptions()const{return pluginOptions;}
inline void setPluginOptions(const QJsonObject& v){pluginOptions = v;}
inline int getTotalPriceForPos()const{return totalPriceForPos;}
inline void setTotalPriceForPos(const int& v){totalPriceForPos = v;}
};
#endif // ORDEROBJECT_H
......@@ -74,7 +74,8 @@ void DetailForm::InitData(OrderObject *orderObject)
ui->detailLab3->setText(orderObject->riderName.isEmpty() ? QString::fromLocal8Bit("暂未指定") : QString::fromLocal8Bit("[姓名]%1 [电话]%2")
.arg(orderObject->riderName, orderObject->riderPhone));
//TODO
ui->detailLab4->setText(Penny2Dollar(orderObject->totalPrice));
ui->detailLab4->setText( Penny2Dollar(orderObject->totalPrice) + " TotalPriceForPos: " + Penny2Dollar(orderObject->totalPriceForPos) );
//先隐藏发票信息
ui->detailSlab6->setText(QString::fromLocal8Bit("三方订单号"));
ui->detailLab6->setText(orderObject->thirdPartyOrderId);
......
......@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 2,2022,11,30
PRODUCTVERSION 2,2022,11,30
FILEVERSION 2,2023,2,23
PRODUCTVERSION 2,2023,2,23
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
......@@ -27,12 +27,12 @@ VS_VERSION_INFO VERSIONINFO
VALUE "CompanyName", "ShangHai.Freemud Co., Ltd."
VALUE "FileDescription", "Delivery Order Plugin Application"
VALUE "InternalName", "fmTakeout.exe"
VALUE "LegalCopyright", "Copyright (C)2014-2022"
VALUE "LegalCopyright", "Copyright (C)2014-2023"
VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2022.11.30"
VALUE "FileVersion", "2.2022.11.30"
VALUE "ProductVersion", "2.2023.2.23"
VALUE "FileVersion", "2.2023.2.23"
//*************************************************************************//
END
END
......
......@@ -166,9 +166,7 @@ void MainForm::MyShow()
connect(m_resultForm, &QListWidget::itemClicked, this, &MainForm::onSearchResultItemClicked);
m_dishesForm = new dishesForm(this);
m_bunisStatusForm = new BStatusForm(this);
m_dailyReportForm =new DailyReportForm(this);
//变更此 "日结" 按钮 为"自测" 按钮;
//ui->mainBtnDayReport->hide();
......@@ -185,7 +183,6 @@ void MainForm::MyShow()
void MainForm::_Init()
{
//this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool);
QLOG_INFO()<<QString::fromLocal8Bit("MainForm _Init Size(width:%1,height:%2)").arg( this->width() ).arg( this->height() );
// 显示托盘
......@@ -206,8 +203,7 @@ void MainForm::_Init()
foreach(QTableWidget *table, m_tableList)
{
table->hide();
if(table == ui->mainTableFinsh /*||
table == ui->mainTableReserve*/)
if( table == ui->mainTableFinsh )
{
for(int i=0; i<5; i++)
{
......@@ -352,6 +348,7 @@ void MainForm::onOrderClear(const QString &orderId, const int &oldstatus)
// 过期订单数据,主界面需要清除界面上订单记录 [订单号添加换行符用于比对查找];
int tempOrderIdLen = orderId.length();
QString tempOrderId = orderId.left( tempOrderIdLen -5 ).append( "\r\n" ).append( orderId.right(5) );
if(!table->item(i, 1)->text().compare(tempOrderId))
{
QLOG_INFO() << QString("[<<<<---MainForm::onOrderClear: Find orderId:%1, tempOrderId:%2 Then Clear Ui Item --->>>>]").arg(orderId).arg(tempOrderId);
......@@ -500,6 +497,7 @@ void MainForm::onChangeOrderStatus(OrderObject *orderObject, int oldStatus)
{
tabBtn = _GetTabBtnByOrderStatus(oldStatus);
table = findChild<QTableWidget*>(tabBtn->property("tableName").toString());
for(int i=0; i<table->rowCount(); i++)
{
// 订单状态改变,主界面需要先移除Old Item后, 再添加New Item; [订单号添加换行符用于比对查找];
......
......@@ -45,7 +45,8 @@
//#define APP_VERSION "2.2022.8.1"
//#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.2022.11.30"
#define APP_VERSION "2.2023.2.23"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
......
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