Commit 853fc522 by wuyang.zou

<1> 支持插件开启长连接模式功能 开关[openTcpChannel]

<2> 支持插件通过长连接模式接受订单状态变更数据;
<3> 支持插件扫码查找 ECMOP 订单并展示订单详情,支持此渠道订单的退款请求;
<4> 支持插件四轮车标识功能
<5> 支持插件汇报入机/入库错误码回调OMS
<6> 入库前商品 PosKey 的有效性检查;

Version: 2.2021.8.12
parent fcd5b593
Pipeline #35710 failed with stage
in 17 seconds
......@@ -33,6 +33,7 @@ SocketCommunicate::SocketCommunicate(ThreadSocket *parent) : ThreadSocket(parent
_domainName.clear();
_isTimeout = true;
_reconnectTimes = 0;
_networkErrIndex = 0;
}
......@@ -297,7 +298,7 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
{
_socketHeartTimer = new QTimer(this);
connect(_socketHeartTimer,&QTimer::timeout,this,&SocketCommunicate::sendSocketHeart);
_socketHeartTimer->start(1000*60*5);
_socketHeartTimer->start(1000*80);
while(!_stopFlag && !_needTcpLogin)
{
......@@ -309,12 +310,21 @@ void SocketCommunicate::acceptTcpSvrSendMsg()
connect(this, &SocketCommunicate::quit, &loop, &QEventLoop::quit);
connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
connect(this, &SocketCommunicate::readReady, &loop, &QEventLoop::quit);
timer.start(180*1000);
timer.start(150*1000);
loop.exec();
}
if(_isTimeout)
break ;
if(_isTimeout) {
QDateTime tmpCurDateTime = QDateTime::currentDateTime();
int seconds = tmpCurDateTime.secsTo(_socketHeartBeatDateTime);
if ( abs(seconds) > 90 ) {
QLOG_ERROR() << "acceptTcpSvrSendMsg:: Nothing Recv, Timeout , Wait Retry Connect Server...... ";
break;
} else {
QLOG_INFO() << "acceptTcpSvrSendMsg:: Nothing Recv, Continue Wait Recv Msg Because Diff Last HeartBeat Stamps < 90 , Value: " << abs(seconds);
continue;
}
}
// <1> Read Socket Msg Head;
QByteArray headByteData = _sslSocket->read(sizeof(Data_Head));
......@@ -580,9 +590,9 @@ bool SocketCommunicate::sendSocketHeart()
// <0.1> Long Time No Recv PosAgnet Push Socket Heart Beat Request, Then PosPlugin Will Send HeartBeat By Self.
QDateTime tmpCurDateTime = QDateTime::currentDateTime();
int seconds = tmpCurDateTime.secsTo(_socketHeartBeatDateTime);
if ( abs(seconds) < 1000*60*2 ) {
QLOG_INFO() << "sendSocketHeart:: No Need Send HeartBeat By Self , currentDateTime(): "
<< tmpCurDateTime.toString("yyyy-MM-dd hh:mm:ss")<< " seconds Diff: "<<abs(seconds) ;
if ( abs(seconds) < 60 ) {
QLOG_INFO() << "sendSocketHeart:: No Need Send HeartBeat By Plugin , currentDateTime(): "
<< tmpCurDateTime.toString("yyyy-MM-dd hh:mm:ss")<< " Seconds Diff From Server Send Heart Time: "<<abs(seconds);
return true;
}
......@@ -742,7 +752,7 @@ void SocketCommunicate::threadStart()
}
// <2> 向目标 IP + 端口发起长连接 与 登录请求, 登录成功后接受 Server Response Msg;
while(!_stopFlag) {
while(!_stopFlag && _reconnectTimes < 10 ) {
do {
// <2.1> Connect Svr , Establish Connection;
......@@ -760,7 +770,7 @@ void SocketCommunicate::threadStart()
QLOG_ERROR() << "threadStart:: loginTcpSvr Failed";
break ;
} else {
QLOG_INFO() << "threadStart:: loginTcpSvr Success, Will Accept Tcp Svr Send Msg......";
QLOG_INFO() << "threadStart:: loginTcpSvr Success, Will Accept Tcp Svr Send Msg...... _reconnectTimes: "<< _reconnectTimes;
}
_needTcpLogin = 0;
......@@ -769,6 +779,7 @@ void SocketCommunicate::threadStart()
acceptTcpSvrSendMsg();
networkOuttime(true);
_reconnectTimes++;
} while(0);
//网络异常断开重连, 释放资源 _sslSocket;
......
......@@ -164,6 +164,8 @@ public:
//超时标识
bool _isTimeout;
//发起长连接重连次数;
int _reconnectTimes;
//长连接套接字
QSslSocket *_sslSocket;
//获取服务器列表地址
......
......@@ -320,6 +320,7 @@ void FlowControl::_StoragePosOrderData() {
bool syncOrderPromotionTbRet = true;
bool syncOrderSumBillTbRet = true;
bool syncOrderPrtMsgTbRet = true;
bool checkProductValidRet = true;
if(!bRetStorageOrderMutex) {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 m_storageOrderMutex.tryLock Failed --->>>>]").arg(order_p->id);
......@@ -333,7 +334,7 @@ void FlowControl::_StoragePosOrderData() {
// 销售单/退货单: 商品表 需存储2份数据(退货金额需要存储为负数);
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Product Data Had Exist --->>>>]").arg(order_p->id);
} else {
if ( PrintCupStickPosDB::getInstance().insertOrderProduct(order_p, posCheckNo) ) {
if ( PrintCupStickPosDB::getInstance().insertOrderProduct(order_p, posCheckNo, checkProductValidRet) ) {
syncDbSuccessNum++;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Product Data Success--->>>>]").arg(order_p->id);
} else {
......@@ -351,13 +352,19 @@ void FlowControl::_StoragePosOrderData() {
// 销售单/退货单: 促销优惠表 需存储2份数据(退货金额需要存储为负数);
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Promotion Data Had Exist --->>>>]").arg(order_p->id);
} else {
if ( PrintOrderPromotionDB::getInstance().insertOrderPromotion(order_p, posCheckNo) ) {
syncDbSuccessNum++;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Promotion Data Success--->>>>]").arg(order_p->id);
if ( syncOrderProductTbRet ) {
if ( PrintOrderPromotionDB::getInstance().insertOrderPromotion(order_p, posCheckNo) ) {
syncDbSuccessNum++;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Promotion Data Success--->>>>]").arg(order_p->id);
} else {
syncOrderPromotionTbRet = false;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Promotion Data Failed --->>>>]").arg(order_p->id);
}
} else {
syncOrderPromotionTbRet = false;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Promotion Data Failed --->>>>]").arg(order_p->id);
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Product Failed, So No Need Insert Promotion --->>>>]").arg(order_p->id);
}
}
/***** 更新 POS本地数据库的优惠数据 是否成功;end:********/
......@@ -410,6 +417,9 @@ void FlowControl::_StoragePosOrderData() {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert PrintMsgQueue Data Failed --->>>>]").arg(order_p->id);
}
}
} else {
syncOrderPrtMsgTbRet = false;
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert Local Table Count < 3, So No Need Insert PrintMsgQueue Data --->>>>]").arg(order_p->id);
}
} else {
......@@ -423,14 +433,12 @@ void FlowControl::_StoragePosOrderData() {
// 2.0解耦POS->不入机流程分支: 需要在此处进行数据校验 是否都存储成功 / 并汇报存储情况;
if ( 4 == syncDbSuccessNum ) {
QLOG_INFO() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert 4 Tables Data Success, Prepare Report Oms--->>>>]").arg(order_p->id);
if ( m_hurryPrintSum ) {
errorStorageOrderMsg = QString("Advance Print SumBill: OrderId: %1 Storage Pos Local DB Success").arg(orderId);
} else {
errorStorageOrderMsg = QString("Decouple Pos: OrderId: %1 Storage Pos Local DB Success").arg(orderId);
}
// 解耦POS标识作为最后标识尺度; 避免后期 解耦和 先打印后存储模式的 同时存在;
if ( order_p->decouplePosVersion >= 20 ) {
errorStorageOrderMsg = QString("Decouple Pos: OrderId: %1 Storage Pos Local DB Success").arg(orderId);
} else {
errorStorageOrderMsg = QString("Advance Print SumBill: OrderId: %1 Storage Pos Local DB Success").arg(orderId);
}
// 落库成功, 准备将订单数据落库成功的报文消息汇报给 OMS:
// 销售单/退货单: 会根据订单状态 是否 = 6 进行转换后进行汇报; 进入此队列 m_storagePosOrdersList 的次数决定汇报的次数;
......@@ -451,39 +459,39 @@ void FlowControl::_StoragePosOrderData() {
} else {
QLOG_ERROR() << QString("[<<<<---FmTakeout _StoragePosOrderData: orderId: %1 Insert 4 Tables Data Failed, Prepare Report Oms--->>>>]").arg(order_p->id);
if ( m_hurryPrintSum ) {
errorStorageOrderMsg = QString("Advance Print SumBill: OrderId: %1 Storage Pos Local DB Error : %2 %3 %4 %5 ").arg(orderId)
// 解耦POS标识作为最后标识尺度; 避免后期 解耦和 先打印后存储模式的 同时存在;
if ( order_p->decouplePosVersion >= 20 ) {
errorStorageOrderMsg = QString("Decouple Pos: OrderId: %1 Storage Pos Local DB Error : %2 %3 %4 %5 ").arg(orderId)
.arg( syncOrderProductTbRet?"":"OrderProductTb ").arg( syncOrderPromotionTbRet?"":"OrderPromotionTb ")
.arg( syncOrderSumBillTbRet?"":"OrderSumBillTb ").arg( syncOrderPrtMsgTbRet?"":"OrderPrtMsgTb ");
} else {
errorStorageOrderMsg = QString("Decouple Pos: OrderId: %1 Storage Pos Local DB Error : %2 %3 %4 %5 ").arg(orderId)
errorStorageOrderMsg = QString("Advance Print SumBill: OrderId: %1 Storage Pos Local DB Error : %2 %3 %4 %5 ").arg(orderId)
.arg( syncOrderProductTbRet?"":"OrderProductTb ").arg( syncOrderPromotionTbRet?"":"OrderPromotionTb ")
.arg( syncOrderSumBillTbRet?"":"OrderSumBillTb ").arg( syncOrderPrtMsgTbRet?"":"OrderPrtMsgTb ");
}
// 解耦POS标识作为最后标识尺度; 避免后期 解耦和 先打印后存储模式的 同时存在;
if ( order_p->decouplePosVersion >= 20 ) {
errorStorageOrderMsg = QString("Decouple Pos: OrderId: %1 Storage Pos Local DB Error : %2 %3 %4 %5 ").arg(orderId)
.arg( syncOrderProductTbRet?"":"OrderProductTb ").arg( syncOrderPromotionTbRet?"":"OrderPromotionTb ")
.arg( syncOrderSumBillTbRet?"":"OrderSumBillTb ").arg( syncOrderPrtMsgTbRet?"":"OrderPrtMsgTb ");
// 落库失败:准备将订单数据落库失败的报文消息汇报给 OMS;
// 由于在落库前就会进行 订单商品有效性进行检查:
// <1>检查商品有效: 则是表字段过长导致插入失败,必须向OMS汇报存储情况;
// <2>检查商品无效,则无需再向 oms汇报落库失败的情况, 理由是检查无效就不会落库;
if ( checkProductValidRet ) {
_AddItemToReportOmsList(order_p, 1, 4, posCheckNo, errorStorageOrderMsg);
}
// 落库失败:准备将订单数据落库失败的报文消息汇报给 OMS;
_AddItemToReportOmsList(order_p, 1, 4, posCheckNo, errorStorageOrderMsg);
}
// 针对上方 着急打印汇总单 但 还需要入机的门店,需要将订单添加到待入机队列中,等待排队入机;
if (order_p->decouplePosVersion < 20) {
// 需要入机 && 待入机队列中没有该订单;
if ( !m_simValidOrdersList.contains( order_p->id ) ) {
// 需要入机 && 待入机队列中没有该订单 && 且检查商品数据有效;
if ( !m_simValidOrdersList.contains( order_p->id ) && checkProductValidRet ) {
m_simValidOrdersList.append(order_p->id);
}
}
} else {
// 非2.0解耦POS->入机流程分支:
// 需要入机 && 待入机队列中没有该订单;
if ( !m_simValidOrdersList.contains( order_p->id ) ) {
// 需要入机 && 待入机队列中没有该订单 && 且检查商品数据有效;
if ( !m_simValidOrdersList.contains( order_p->id ) && checkProductValidRet ) {
m_simValidOrdersList.append(order_p->id);
// 默认都是着急向POS录单; 除非特别配置 noHurryRecordPos;
if ( !ConfigManger::GetInstance().GetNoHurryRecordPos() ) {
......@@ -494,6 +502,19 @@ void FlowControl::_StoragePosOrderData() {
m_storagePosOrdersList.removeOne(order_p->id);
m_storageOrderMutex.unlock();
// 检查商品数据无效订单, 需要将订单 迁移到 异常单 Tab 页.
if ( !checkProductValidRet ) {
if(6 == order_p->orderStatus || OrderObject::SimExceptRefund == order_p->orderStatus){
order_p->orderStatus = OrderObject::SimExceptRefund;
} else {
order_p->orderStatus = OrderObject::SimExceptSale;
}
emit changeOrderStatus(order_p);
}
// End Refresh Ui
}
}
......@@ -661,6 +682,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->storeType = 0;
orderObject->decouplePosVersion = 0;
orderObject->deliveryAtProd = false;
orderObject->extendType = 0;
orderObject->FromJson(jsonObject);
orderObject->pushOrderType=0;
......@@ -698,20 +720,10 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
//判断插入数据库是否出现失败;
if(!tempBResult) {
//新增业务逻辑,针对汇报异常的订单需要;添加到 向OMS汇报入机情况的队列中;
m_RepOMSRecordOrderMutex.lock();
RepOMSRecordOrderInfo* repOMSRecordOrder = new RepOMSRecordOrderInfo();
repOMSRecordOrder->orderNo = orderObject->id;
repOMSRecordOrder->channel = orderObject->channel;
repOMSRecordOrder->type = (6 == orderObject->orderStatus)?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
repOMSRecordOrder->status = QString::fromLocal8Bit("2");
repOMSRecordOrder->opUser = m_cashierName.isEmpty()?QString::fromLocal8Bit("POS"):m_cashierName;
repOMSRecordOrder->recordDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");;
repOMSRecordOrder->storeId = m_storeId.isEmpty()?QString::fromLocal8Bit("未知门店"):m_storeId;
repOMSRecordOrder->remark = QString("POS Local DataBase Connect Error Or Table No Exist Error,Please Check DataBase Setting In Time");
repOMSRecordOrder->reqResult = 0;
repOMSRecordOrder->posPluginVersion = APP_VERSION;
m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock();
QString requestType = (6 == orderObject->orderStatus)?QString("6"):QString("3");
QString msgDesc = QString("POS Local DataBase Connect Error Or Table No Exist Error,Please Check DataBase Setting In Time");
QString errorCode = "1009";
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel, requestType, QString("2"), QString("0000"), msgDesc, errorCode );
//修改订单状态,避免后面对数据库出现不稳定的POS机仍然进行录单操作;
if(6 == orderObject->orderStatus || OrderObject::SimExceptRefund == orderObject->orderStatus){
orderObject->orderStatus = OrderObject::SimExceptRefund;
......@@ -736,7 +748,7 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
int oldStatus = orderObject->orderStatus;
int oldArriveAhead = orderObject->inAdvanceTakemeal;
orderObject->FromJson(jsonObject);
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Order Map:Update orderId:%1 OldStatus:%2: curStatus:%3]--->>>>]").arg(orderObject->id).arg(oldStatus).arg(orderObject->orderStatus);
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Order Map:Update orderId: %1 OldStatus: %2: curStatus: %3]--->>>>]").arg(orderObject->id).arg(oldStatus).arg(orderObject->orderStatus);
if(oldStatus != orderObject->orderStatus) {
emit changeOrderStatus(orderObject, oldStatus);
}
......@@ -1499,7 +1511,6 @@ void FlowControl::_ReportOMSRecordOrderInfo()
return ;
}
// 使用二级指针操作一级指针;
RepOMSRecordOrderInfo* RepOMSRecOrderIn = NULL;
bool findFlag = false;
QList<RepOMSRecordOrderInfo*>::iterator i;
......@@ -1519,7 +1530,7 @@ void FlowControl::_ReportOMSRecordOrderInfo()
}
QLOG_INFO()<<QString("[<<<<----FlowControl::_ReportOMSRecordOrderInfo m_orderRecordRepOMSList size:%1, findFlag:%1 ---->>>>>]")
QLOG_INFO()<<QString("[<<<<----FlowControl::_ReportOMSRecordOrderInfo m_orderRecordRepOMSList size:%1, findFlag:%2 ---->>>>>]")
.arg( m_orderRecordRepOMSList.size() ).arg(findFlag?1:0);
if ( !findFlag || !RepOMSRecOrderIn ) {
//上面的汇报OMS订单入机状态的汇报列表 遍历循环后:如果出现 RepOMSRecOrderIn == NULL;不能从List容器的头部移除已汇报成功结果
......@@ -1545,6 +1556,7 @@ void FlowControl::_ReportOMSRecordOrderInfo()
sendJson.insert("storeId", RepOMSRecOrderIn->storeId);
sendJson.insert("remark", RepOMSRecOrderIn->remark);
sendJson.insert("checkNo", RepOMSRecOrderIn->checkNo);
sendJson.insert("failCode", RepOMSRecOrderIn->failCode);
sendJson.insert("ipAddress",m_ipAddress);
sendJson.insert(JSON_POS_PLUGIN_VERSION, RepOMSRecOrderIn->posPluginVersion);
......@@ -1588,6 +1600,9 @@ void FlowControl::_ReportOMSRecordOrderInfo()
}
void FlowControl::_AddItemToReportOmsList(const OrderObject* orderPoint, const int& msgType, const int& msgRet, const QString& chkNum, const QString& msgDesc){
QString errorCode = "";
if ( orderPoint ) {
if ( 1 == msgType ) {
// msgRet: 3 -> 标识存储DB成功; 4 -> 标识存储DB失败;
......@@ -1595,19 +1610,19 @@ void FlowControl::_AddItemToReportOmsList(const OrderObject* orderPoint, const i
QLOG_INFO()<< QString("[<<<<---_AddItemToReportOmsList:: Storage Pos Local DB Success, Add Report List, OrderId:%1--->>>>]").arg(orderPoint->id);
} else {
QLOG_INFO()<< QString("[<<<<---_AddItemToReportOmsList:: Storage Pos Local DB Failed, Add Report List, OrderId:%1--->>>>]").arg(orderPoint->id);
errorCode = "1009";
}
} else {
if ( 1 == msgRet ) {
/*if ( 1 == msgRet ) {
QLOG_INFO()<< QString("[<<<<---_AddItemToReportOmsList:: Simulater Record Pos Success, Add Report List, OrderId:%1--->>>>]").arg(orderPoint->id);
} else {
QLOG_INFO()<< QString("[<<<<---_AddItemToReportOmsList:: Simulater Record Pos Failed, Add Report List, OrderId:%1--->>>>]").arg(orderPoint->id);
}
}*/
}
QString requestType = orderPoint->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
_AddOrUpdateReportOmsList(orderPoint->id, orderPoint->channel, requestType, QString::number(msgRet), chkNum, msgDesc);
_AddOrUpdateReportOmsList(orderPoint->id, orderPoint->channel, requestType, QString::number(msgRet), chkNum, msgDesc, errorCode );
} else {
QLOG_INFO()<< QString("[<<<<---_AddItemToReportOmsList:: Order Pointer Is Empty --->>>>]");
}
......@@ -1615,7 +1630,8 @@ void FlowControl::_AddItemToReportOmsList(const OrderObject* orderPoint, const i
}
void FlowControl::_AddOrUpdateReportOmsList(const QString &orderId, const QString &channel, const QString &repType, const QString &status, const QString &chkNum, const QString &error) {
void FlowControl::_AddOrUpdateReportOmsList(const QString &orderId, const QString &channel, const QString &repType, const QString &status, const QString &chkNum,
const QString &error, const QString &errorCode) {
bool repReportLockRet = m_RepOMSRecordOrderMutex.tryLock(2*1000);
if (repReportLockRet) {
......@@ -1638,7 +1654,7 @@ void FlowControl::_AddOrUpdateReportOmsList(const QString &orderId, const QStri
repOMSRecordOrder = new RepOMSRecordOrderInfo();
repOMSRecordOrder->reqResult = 0;
} else {
if(error == repOMSRecordOrder->remark && 1==repOMSRecordOrder->reqResult){
if ( error == repOMSRecordOrder->remark && repType == repOMSRecordOrder->type && 1== repOMSRecordOrder->reqResult ) {
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder);
//repOMSRecordOrder->reqResult=1; //此时reqResult已经是1了;
} else {
......@@ -1655,11 +1671,13 @@ void FlowControl::_AddOrUpdateReportOmsList(const QString &orderId, const QStri
repOMSRecordOrder->recordDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");;
repOMSRecordOrder->storeId = m_storeId;
repOMSRecordOrder->remark = error;
repOMSRecordOrder->failCode = errorCode;
repOMSRecordOrder->checkNo = chkNum;
repOMSRecordOrder->posPluginVersion = 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();
// 后期可能对汇报入机存储情况要求更加严格, 就需要对内存待汇报记录进行 持久化记录: 只持久化成功的记录;
} else {
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_AddOrUpdateReportOmsList: tryLock failed orderId:%1 error:%2 --->>>>]").arg(orderId).arg(error);
}
......@@ -1990,6 +2008,8 @@ bool FlowControl::_ResponseSimphony04Request(const QJsonObject &content, QJsonOb
if(m_simValidOrdersList.contains(orderId)) {
/***** 汇报POS小票号是否成功;begin:*********/
bool bRetReportCheckNo = false;
bool checkProductValidRet = false; // 无效订单就不会进行入机,故无需担心此类情况;
if(order_p->pushOrderType==1) {
SimProcOrderDB::getInstance().updatePushOrderStatus(orderId,1);
order_p->isPush= true;
......@@ -2014,9 +2034,6 @@ bool FlowControl::_ResponseSimphony04Request(const QJsonObject &content, QJsonOb
}
//***** 更新 POS本地数据库的销售/退货 标识表中的真实小票号: 用于界面显示(不入机订单需要变更显示逻辑) *********/
if (m_hurryPrintSum) {
QLOG_INFO()<<QString("[<<<<---_ResponseSimphony04Request::orderId:%1 Is HurryPrintSum, Still Need Upate SimProcOrderDB CheckNo, Easy To Check Real Pos CheckNo--->>>>]").arg(orderId);
}
bRetReportCheckNo = SimProcOrderDB::getInstance().updatePosOrderCheckNo(orderId,posCheckNo);
/***** 更新 POS本地数据库的商品表 真实小票号: 解耦后,仍然有能正确打印订单数据的关联关系 begin:*********/
......@@ -2028,12 +2045,11 @@ bool FlowControl::_ResponseSimphony04Request(const QJsonObject &content, QJsonOb
if (!PrintCupStickPosDB::getInstance().updateOrderProductCheckNum(order_p, posCheckNo) )
retSyncOrderProduct = false;
}
} else {
if (m_hurryPrintSum) {
QLOG_INFO()<<QString("[<<<<---_ResponseSimphony04Request::orderId:%1 Is HurryPrintSum, No Need Insert PrintCupStickPosDB, Because Recive Order Had Storage, Can't Change CheckNo--->>>>]").arg(orderId);
} else {
if (!PrintCupStickPosDB::getInstance().insertOrderProduct(order_p, posCheckNo) )
} else {
if (!PrintCupStickPosDB::getInstance().insertOrderProduct(order_p, posCheckNo, checkProductValidRet) )
retSyncOrderProduct = false;
}
......@@ -2049,7 +2065,6 @@ bool FlowControl::_ResponseSimphony04Request(const QJsonObject &content, QJsonOb
if (!PrintOrderPromotionDB::getInstance().updateOrderPromotionCheckNum(order_p, posCheckNo) )
retSyncOrderPromotion = false;
}
} else {
if (m_hurryPrintSum) {
QLOG_INFO()<<QString("[<<<<---_ResponseSimphony04Request::orderId:%1 Is HurryPrintSum, No Need Insert PrintOrderPromotionDB, Because Recive Order Had Storage, Can't Change CheckNo--->>>>]").arg(orderId);
......@@ -2110,45 +2125,14 @@ bool FlowControl::_ResponseSimphony04Request(const QJsonObject &content, QJsonOb
m_OrderEntryMutex.unlock();
}
//新增业务逻辑,针对汇报小票号成功的订单需要;添加到 向OMS汇报入机情况的队列中;
m_RepOMSRecordOrderMutex.lock();
RepOMSRecordOrderInfo* repOMSRecordOrder = NULL;
if(!m_orderRecordRepOMSList.isEmpty()){
QList<RepOMSRecordOrderInfo*>::iterator i;
for (i = m_orderRecordRepOMSList.begin(); i != m_orderRecordRepOMSList.end(); ++i) {
repOMSRecordOrder = (*i); //*i 使用*运算符获取遍历容器中所指的元素;
if (orderId == repOMSRecordOrder->orderNo) {
break;
} else {
repOMSRecordOrder = NULL;
}
}
}
if (!repOMSRecordOrder){
repOMSRecordOrder = new RepOMSRecordOrderInfo();
repOMSRecordOrder->reqResult = 0;
} else {
//不管之前入机是什么报错,目前入机成功,必须再次汇报;
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder); //剔除已经存在的,更新完数据后,在添加进来;
repOMSRecordOrder->reqResult = 0;
}
repOMSRecordOrder->orderNo = orderId;
repOMSRecordOrder->channel = order_p->channel;
repOMSRecordOrder->type = (6 == order_p->orderStatus)?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
repOMSRecordOrder->status = QString::fromLocal8Bit("1");
repOMSRecordOrder->opUser = m_cashierName;
repOMSRecordOrder->recordDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");;
repOMSRecordOrder->storeId = m_storeId;
repOMSRecordOrder->remark = QString::fromLocal8Bit("入机成功");
repOMSRecordOrder->checkNo = posCheckNo;
repOMSRecordOrder->posPluginVersion = APP_VERSION;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_ResponseSimphony04Request:m_orderRecordRepOMSList.append() orderId:%1 orderStatus:%2 checkNo:%3--->>>>]").arg(orderId).arg(repOMSRecordOrder->type).arg(posCheckNo);
m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock();
//新增业务逻辑,针对汇报小票号成功的订单需要;添加到 向OMS汇报入机情况的队列中;
QString requestType = (6 == order_p->orderStatus)?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
QString msgDesc = QString::fromLocal8Bit("入机成功");
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_ResponseSimphony04Request:m_orderRecordRepOMSList.append() orderId:%1 orderStatus:%2 checkNo:%3--->>>>]")
.arg(orderId).arg(requestType).arg(posCheckNo);
_AddOrUpdateReportOmsList(orderId, order_p->channel,requestType, QString("1"), posCheckNo, msgDesc, QString(""));
}
/* 汇报完小票号后,就必须将其从 m_simValidOrdersList 列表中移除;
else {
} */
} else {
result=false;
error=QString::fromLocal8Bit("Request Action04: Delivery OrderId Or Check Num Can't Empty");
......@@ -2222,9 +2206,7 @@ bool FlowControl::_ResponseSimphony05Request(const QJsonObject &content, QJsonOb
} /*****POS本地数据库不存在 orderId &&posCheckNo*********/
else{
if (m_hurryPrintSum) {
QLOG_ERROR()<<QString("[<<<<---_ResponseSimphony05Request orderId:%1 Is HurryPrintSum, But No Storage SumInfo Into DB Before Record Pos--->>>>]").arg(orderId);
}
QLOG_ERROR()<<QString::fromLocal8Bit("[<<<<---Simphony[ACTION:05:] OrderId:%1 Not Exist In tb_msr_customer_info --->>>>]").arg(orderId);
if ( PrintSumBillPosDB::getInstance().insertOrderSumBill(order_p, posCheckNo, posCheckTime) ){
retSyncOrderSum = 1;
}
......@@ -2299,49 +2281,18 @@ bool FlowControl::_ResponseSimphony06Request(const QJsonObject &content, QJsonOb
//新增业务逻辑,针对汇报异常的订单需要;添加到 向OMS汇报入机情况的队列中;
if(!m_simValidOrdersList.empty()){
m_RepOMSRecordOrderMutex.lock();
RepOMSRecordOrderInfo* repOMSRecordOrder = NULL;
if(!m_orderRecordRepOMSList.isEmpty()) {
QList<RepOMSRecordOrderInfo*>::iterator i;
for (i = m_orderRecordRepOMSList.begin(); i != m_orderRecordRepOMSList.end(); ++i) {
repOMSRecordOrder = (*i); //*i 使用*运算符获取遍历容器中所指的元素;
if (m_simValidOrdersList.first() == repOMSRecordOrder->orderNo) {
break;
} else {
repOMSRecordOrder = NULL;
}
}
}
if (!repOMSRecordOrder){
repOMSRecordOrder = new RepOMSRecordOrderInfo();
repOMSRecordOrder->reqResult = 0;
} else {
if(simExceptMsg == repOMSRecordOrder->remark && 1==repOMSRecordOrder->reqResult){
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder);
//repOMSRecordOrder->reqResult = 1; //此时reqResult已经是1了;
} else {
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder);
repOMSRecordOrder->reqResult = 0;
}
}
repOMSRecordOrder->orderNo = m_simValidOrdersList.first();
OrderObject* order_temp = m_FmOrdersMap.value(repOMSRecordOrder->orderNo);
QString tmpOrderId = m_simValidOrdersList.first();
QString requestType = "0";
QString tmpChannel = "";
OrderObject* order_temp = m_FmOrdersMap.value(tmpOrderId);
if (!order_temp){
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---%1订单并不存在m_FmOrdersMap[键值对]中;m_FmOrdersMap.size()=%2--->>>>]").arg(orderId).arg(m_FmOrdersMap.size());
repOMSRecordOrder->type = QString::fromLocal8Bit("0");
}else{
repOMSRecordOrder->type = order_temp->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
repOMSRecordOrder->channel = order_temp->channel;
requestType = order_temp->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
tmpChannel = order_temp->channel;
}
repOMSRecordOrder->status = QString::fromLocal8Bit("2");
repOMSRecordOrder->opUser = m_cashierName;
repOMSRecordOrder->recordDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");;
repOMSRecordOrder->storeId = m_storeId;
repOMSRecordOrder->remark = simExceptMsg;
repOMSRecordOrder->posPluginVersion = APP_VERSION;
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_ResponseSimphony06Request:m_orderRecordRepOMSList.append() orderId:%1 simExceptMsg:%2--->>>>]").arg(orderId).arg(simExceptMsg);
m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock();
_AddOrUpdateReportOmsList(tmpOrderId, tmpChannel, requestType, QString("2"), QString(""), simExceptMsg, QString("") );
}
return true;
}
......@@ -2408,43 +2359,9 @@ bool FlowControl::_ResponseSimphony06Request(const QJsonObject &content, QJsonOb
rObj.insert("pay_id", cObj);
data = rObj;
//************* 新增业务逻辑,针对汇报异常的订单需要;添加到 向OMS汇报入机情况的队列中; Begin*************//
m_RepOMSRecordOrderMutex.lock();
RepOMSRecordOrderInfo* repOMSRecordOrder = NULL;
if(!m_orderRecordRepOMSList.isEmpty()){
QList<RepOMSRecordOrderInfo*>::iterator i;
for (i = m_orderRecordRepOMSList.begin(); i != m_orderRecordRepOMSList.end(); ++i) {
repOMSRecordOrder = (*i); //*i 使用*运算符获取遍历容器中所指的元素;
if (orderId == repOMSRecordOrder->orderNo) {
break;
} else {
repOMSRecordOrder = NULL;
}
}
}
if (!repOMSRecordOrder){
repOMSRecordOrder = new RepOMSRecordOrderInfo();
repOMSRecordOrder->reqResult = 0;
} else {
if(simExceptMsg == repOMSRecordOrder->remark && 1==repOMSRecordOrder->reqResult){
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder);
//repOMSRecordOrder->reqResult=1; //此时reqResult已经是1了;
} else {
m_orderRecordRepOMSList.removeOne(repOMSRecordOrder);
repOMSRecordOrder->reqResult=0;
}
}
repOMSRecordOrder->orderNo = orderId;
repOMSRecordOrder->channel = order_p->channel;
repOMSRecordOrder->type = order_p->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
repOMSRecordOrder->status = QString::fromLocal8Bit("2");
repOMSRecordOrder->opUser = m_cashierName;
repOMSRecordOrder->recordDate = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");;
repOMSRecordOrder->storeId = m_storeId;
repOMSRecordOrder->remark = simExceptMsg;
repOMSRecordOrder->posPluginVersion = APP_VERSION;
QString requestType = order_p->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FlowControl::_ResponseSimphony06Request:m_orderRecordRepOMSList.append() orderId:%1 simExceptMsg:%2--->>>>]").arg(orderId).arg(simExceptMsg);
m_orderRecordRepOMSList.append(repOMSRecordOrder);
m_RepOMSRecordOrderMutex.unlock();
_AddOrUpdateReportOmsList(orderId, order_p->channel, requestType, QString("2"), QString(""), simExceptMsg, QString("") );
//************* 新增业务逻辑,针对汇报异常的订单需要;添加到 向OMS汇报入机情况的队列中; end*************//
} else {
result=false;
......@@ -2761,23 +2678,13 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//星巴克的订单类型:1:新订单; 2:预订单; 3:客诉单; 4:MOP自测订单; 5:预约订单; 7:当日预约单;8拼单(使用父级订单类型)
// 客诉单 支付方式 由现金 变更为 OrderPayType=1;在Simphony扩展程序将其转换成 84:MOD + 非码订单:orderId 入机;
if(3 == orderObject->getOrderType()) {
tempServiceType = 23; // 客诉单: 12 -> 23
tempOrderPayType = 1;
}
// MOP自测订单 在下方处理;星巴克-预约订单:在下方处理;
// OMS提供的数据://订单渠道: 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP;
// MOD渠道对应的业务逻辑 ;
else if ( "MOD" == orderObject->channel ) {
if ( 7 == orderObject->orderType ) {
tempServiceType = 14;
} else {
// platformSource:平台来源:1 app; 2 ele; 3 ors; 4 WeChat ; 5 口碑;
if ( "4" == orderObject->platformSource ) {
tempServiceType = 27;
} else {
tempServiceType = 9;
}
}
// platformSource:平台来源:1 app; 2 ele; 3 ors; 4 WeChat ; 5 口碑;
tempOrderPayType = 84;
//星巴克App端支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡; 5/7:MOP使用券或星星抵扣 0元支付; 8:IStore订单; 9:银联支付(=3);
......@@ -2804,38 +2711,15 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
tempSbkAppPayValue = "-1";
}
} // 兼容渠道名称不统一问题
else if ( "WSG-MOD" == orderObject->channel ) {
if ( 7 == orderObject->orderType ) {
tempServiceType = 14;
} else {
// platformSource:平台来源:1 app; 2 ele; 3 ors; 4 WeChat; 5 口碑;
if ( "4" == orderObject->platformSource ) {
tempServiceType = 31;
} else {
tempServiceType = 9;
}
}
} else if ( "WSG-MOD" == orderObject->channel ) {
// platformSource:平台来源:1 app; 2 ele; 3 ors; 4 WeChat; 5 口碑;
tempOrderPayType = 84;
tempSbkAppPayType = -1;
tempSbkAppPayValue = "-1";
}// MOP渠道对应的业务逻辑;
else if ( "MOP" == orderObject->channel ){
if ( 7 == orderObject->orderType ) {
tempServiceType = 14;
} else if (10 == orderObject->orderType) {
tempServiceType = 21;
} else {
// 区别:口碑-MOP / App-MOP;
if ( "5" == orderObject->platformSource ) {
tempServiceType = 29;
} else {
tempServiceType = 18;
}
}
else if ( "MOP" == orderObject->channel || "EC-MOP" == orderObject->channel ){
tempOrderPayType = 84;
//星巴克App端支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡; 5/7:MOP使用券或星星抵扣 0元支付; 8:IStore订单; 9:银联支付(=3);
......@@ -2864,16 +2748,10 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//MOP最后判断 是否是 MOP自测订单;
if(4== orderObject->getOrderType()) {
tempServiceType = 23; // 自测单: 20 -> 23
tempOrderPayType = 1;
}
}else if("ELE" == orderObject->channel){
if ( 7 == orderObject->orderType ) {
tempServiceType = 14;
} else {
tempServiceType = 11;
}
tempOrderPayType = 83;
tempSbkAppPayValue = orderObject->id;
//星巴克-预约订单: 预约实物入机: 销售单订单类型:21; 退货单订单类型: 22;
......@@ -2883,7 +2761,6 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
// 星巴克-预约订单: 配送费入机: 销售单订单类型:23; 退货单订单类型: 24;
}else if("ORS" == orderObject->channel && !orderObject->appointmentDayFlag ){
}else{
tempServiceType = 11;
tempOrderPayType = 83;
tempSbkAppPayValue = orderObject->id;
}
......@@ -2891,60 +2768,21 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//存在两种Case:正常退货单 && 【非预约日期(录配送费判断)/默认值是初始化0】; || 预约实物退货单 【&&预约实物送达日期 不支持此case】 || 预约退单:只能退配送费;
// 预约如果出现退单,也只能退配送费和打包费[不存在退预约实物(券)]
if (orderObject->pushOrderType==0) {
/*
if("ELE" == orderObject->channel) {
if ( 7 == orderObject->orderType ) {
tempServiceType = 15;
} else {
tempServiceType = 16;
}
}
else if ( "MOD" == orderObject->channel ) {
if ( 7 == orderObject->orderType ) {
tempServiceType = 15;
} else {
// platformSource:平台来源:1 app; 2 ele; 3 ors; 4 WeChat; 5 口碑;
if ( "4" == orderObject->platformSource ) {
tempServiceType = 28;
} else {
tempServiceType = 17;
}
}
} // 兼容渠道名称不统一问题
else if ( "WSG-MOD" == orderObject->channel ) {
if ( 7 == orderObject->orderType ) {
tempServiceType = 15;
} else {
// platformSource:平台来源:1 app; 2 ele; 3 ors; 4 WeChat; 5 口碑;
if ( "4" == orderObject->platformSource ) {
tempServiceType = 32;
} else {
tempServiceType = 17;
}
}
}
else if ( "MOP" == orderObject->channel ) {
if ( 7 == orderObject->orderType ) {
tempServiceType = 15;
} else if (10 == orderObject->orderType) {
tempServiceType = 22;
} else {
// 区分: 口碑-MOP / App-MOP;
if ( "5" == orderObject->platformSource ) {
tempServiceType = 30;
} else {
tempServiceType = 19;
}
}
} else if ( "MOD" == orderObject->channel ) {
// platformSource:平台来源:1 app; 2 ele; 3 ors; 4 WeChat; 5 口碑;
} else if ( "WSG-MOD" == orderObject->channel ) {
// platformSource:平台来源:1 app; 2 ele; 3 ors; 4 WeChat; 5 口碑;
} else if ( "MOP" == orderObject->channel || "EC-MOP" == orderObject->channel ) {
} //预约->配送费入机: 销售单订单类型:23; 退货单订单类型: 24; //预约->实物入机: 销售单订单类型:21;退货单订单类型:22;【此case不存在】
else if("ORS" == orderObject->channel) {
} else if("ORS" == orderObject->channel) {
//预约系统 支付方式: 1:支付宝; 2:微信; 3:银联; 4:SVC卡; 5/7:MOP使用券或星星抵扣 0元支付; 8:IStore订单; 9:银联支付(=3);
//针对使用 券 + 星星折扣 +(券&星星折扣)用户不用实际支付任何金额,需要采用0元支付方式结单;
//插件传给Simphony扩展程序时支付方式=1;在Simphony扩展程序将其转换成 84:MOD + 非码订单:orderId 入机;
} else {
tempServiceType = 44; // 退货订单类型:13 已经过期; 后期还需要考虑MOP的正向订单类型/退货订单类型; 不能使用32范围内的值暂用44;
}
} else {}
*/
}
// 优先使用OMS传递的 globalServiceType 与 globalOrderType 值为准;
......@@ -3031,7 +2869,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
emit doUnLockFloatFrom(); //解锁悬浮框锁定
// 存储订单入机前异常信息并汇报OMS;
QString requestType = orderObject->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), QString(""), error);
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), QString(""), error, QString("1010"));
return true;
}
/**********************************************************************************/
......@@ -3070,7 +2908,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
// 存储订单入机前异常信息并汇报OMS;
QString requestType = orderObject->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), QString(""), error);
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), QString(""), error, QString("1011") );
return true;
}
noSplitSubObj.insert("consume_num", subDish->qty);
......@@ -3144,7 +2982,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
// 存储订单入机前异常信息并汇报OMS;
QString requestType = orderObject->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), QString(""), error);
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), QString(""), error, QString("1011") );
return true;
}
......@@ -3240,7 +3078,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//②code中长度小于3位 直接退出本次录单; [ '34' , '16' ]
//③code中长度大于9位 直接退出本次录单; [ '1234567890' ]
//④code 异常, 向oms 汇报异常;
error = QString::fromLocal8Bit("This Order SubProduct PosKey Is String And No Contains Default Or Sku Length < 3 Or Sku Length > 9 ");
error = QString::fromLocal8Bit("This Order Coupon Product PosKey Is String And No Contains Default Or Sku Length < 3 Or Sku Length > 9 ");
m_OrderEntryMutex.lock();
m_simValidOrdersList.removeOne(orderObject->id);
m_OrderEntryMutex.unlock();
......@@ -3248,7 +3086,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
emit doUnLockFloatFrom(); //解锁悬浮框锁定
// 存储订单入机前异常信息并汇报OMS;
QString requestType = orderObject->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), QString(""), error);
_AddOrUpdateReportOmsList(orderObject->id, orderObject->channel,requestType, QString("2"), QString(""), error, QString("1010") );
return true;
}
......
......@@ -92,6 +92,7 @@ private:
QString storeId; //门店编号
QString remark; //备注:入机出错信息
QString checkNo; //小票号:入机成功时的小票号;
QString failCode; // 入机/存储 错误码 (成功时都给 "");
QString posPluginVersion; //该订单入机后, 汇报给OMS对应程序的版本号;
int reqResult; //向OMS请求汇报结果;
}RepOMSRecordOrderInfo;
......@@ -387,13 +388,6 @@ private slots:
void _AddItemToReportOmsList(const OrderObject* orderPoint, const int& msgType, const int& msgRet, const QString& chkNum, const QString& msgDesc);
/* 功能:往 向OMS汇报POS订单入机状态的队列 添加新项 或 更新队列中数据;
* 参数:NULL
* 返回:NULL
* */
void _AddOrUpdateReportOmsList(const QString &orderId, const QString &channel, const QString &repType, const QString &status, const QString &chkNum, const QString &error);
/* 功能:获取Json对象的字符
* 参数:NULL
* 返回:Json字符串
......@@ -451,6 +445,13 @@ public slots:
* */
void onProcessOrder(const QString& operation, const QString& orderId);
/* 功能:往 向OMS汇报POS订单入机状态的队列 添加新项 或 更新队列中数据;
* 参数:NULL
* 返回:NULL
* */
void _AddOrUpdateReportOmsList(const QString &orderId, const QString &channel, const QString &repType, const QString &status, const QString &chkNum,
const QString &error, const QString &errorCode);
/* 功能: 接受长连接推送消息数据
* 参数:[1]字节数组格式 报文 [2] 消息类型ID
* 返回: 处理成功;
......
......@@ -120,7 +120,19 @@ PrintCupStickPosDB &PrintCupStickPosDB::getInstance()
return printCupStickPosDB;
}
bool PrintCupStickPosDB::insertOrderProduct(OrderObject* orderObj,const QString& posCheckNo){
bool PrintCupStickPosDB::insertOrderProduct(OrderObject* orderObj,const QString& posCheckNo, bool &checkProductValidRet) {
// WSG-杯贴祝福-商品券号关联数据;
if ( "WSG-MOD" == orderObj->channel && "4" == orderObj->platformSource ) {
checkProductValidRet = checkCouponProdAllVaild(orderObj);
} else { // All Channel 商品关联数据;
checkProductValidRet = checkNormalProdAllVaild(orderObj);
}
if ( !checkProductValidRet ) {
QLOG_ERROR()<<"insertOrderProduct:: Before Insert Normal Product Or Coupon Product Db, Check PosKey Is Invalid Or Qty Is 0";
return false;
}
QMutexLocker mutex(&m_mutex);
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
......@@ -153,6 +165,10 @@ bool PrintCupStickPosDB::insertOrderProduct(OrderObject* orderObj,const QString&
QLOG_ERROR()<<"[<<<<---insertOrderProduct::insertOrderProduct: Begin Rollback Failed--->>>>]"<<m_sqlDb.lastError().text();
}
}
} else {
if ( !query.exec( "rollback" ) ) {
QLOG_ERROR()<<"[<<<<---insertOrderProduct::insertOrderProduct: Begin Rollback Failed--->>>>]"<<m_sqlDb.lastError().text();
}
}
m_sqlDb.close();
......@@ -327,6 +343,56 @@ bool PrintCupStickPosDB::insertCouponSubProd(OrderObject* orderObj, const int ma
}
bool PrintCupStickPosDB::checkCouponProdAllVaild(OrderObject* orderObj) {
if (!orderObj) {
QLOG_ERROR()<<"checkCouponProdAllVaild Order Obj Point Is Null";
return false;
}
for (int i=0; i < orderObj->coupList.count(); i++) {
CouponsObject* coupon = orderObj->coupList.at(i);
QString tmpPosKey = "";
int tmpQty = 0;
QString error = "";
for ( int j = 0; j < coupon->skus.count(); j++ ) {
tmpPosKey = coupon->skus[j]->code;
tmpQty = coupon->skus[j]->qty;
// 检查: ①主商品属性:code中含有Default字符串(不区分大小写) + ②code中以非数字开头 + ③商品数量是0 + ④PosKey长度在 [3~9] 之间;
QString tempPosKeyLeftHead = tmpPosKey.left(1);
// 校验券-主商品;
if ( 0 == j ) {
if (tmpPosKey.contains("Default",Qt::CaseInsensitive) || (tempPosKeyLeftHead<QString('0') || tempPosKeyLeftHead>QString('9'))
|| !tmpQty || tmpPosKey.length()<3 || tmpPosKey.length()>9 ) {
error = QString::fromLocal8Bit("This Order Has PosKey Is Combo Error Or Default* Or qty Is Zore Or Sku Length < 3 Or Sku Length > 9");
QString requestType = orderObj->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
FlowControl::GetInstance()._AddOrUpdateReportOmsList(orderObj->id, orderObj->channel,requestType, QString("2"), QString(""), error, QString("1010"));
return false;
}
}
// 校验券-子商品;
else {
if( tmpPosKey.contains("Default",Qt::CaseInsensitive) ) {
continue;
} else {
if ( tempPosKeyLeftHead<QString('0') || tempPosKeyLeftHead>QString('9') || !tmpQty || tmpPosKey.length()<3 || tmpPosKey.length()>9 ) {
error = QString::fromLocal8Bit("This Order SubProduct PosKey Is String And No Default* Or qty Is Zore Or Sku Length < 3 Or Sku Length > 9 ");
QString requestType = orderObj->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
FlowControl::GetInstance()._AddOrUpdateReportOmsList(orderObj->id, orderObj->channel,requestType, QString("2"), QString(""), error, QString("1011") );
return false;
}
}
}
}
}
return true;
}
bool PrintCupStickPosDB::insertNormalProd(OrderObject* orderObj, const QString& posCheckNo){
int inProdSucNum = 0;
......@@ -336,6 +402,11 @@ bool PrintCupStickPosDB::insertNormalProd(OrderObject* orderObj, const QString&
QSqlQuery query(m_sqlDb);
QDateTime qdaTi = QDateTime::currentDateTimeUtc();
if (!orderObj) {
QLOG_ERROR()<<"insertNormalProd:: orderObj Is Null";
return false;
}
for (int i=0; i < orderObj->proList.count(); i++) {
dishesObject* dish=orderObj->proList.at(i);
query.prepare("INSERT INTO tb_main_prod_refinfo(chk_num, order_id, order_status, create_datetime, "
......@@ -479,6 +550,58 @@ bool PrintCupStickPosDB::insertNormalSubProd(OrderObject* orderObj, const int ma
}
bool PrintCupStickPosDB::checkNormalProdAllVaild(OrderObject* orderObj){
if (!orderObj) {
QLOG_ERROR()<<"checkNormalProdAllVaild Order Obj Point Is Null";
return false;
}
QString tmpPosKey = "";
QString tempPosKeyLeftHead = "";
int tmpQty = 0;
QString error = "";
for (int i=0; i < orderObj->proList.count(); i++) {
dishesObject* dish=orderObj->proList.at(i);
tmpPosKey = dish->code;
tmpQty = dish->qty;
// 检查主商品: ①主商品属性:code中含有Default字符串(不区分大小写) + ②code中以非数字开头 + ③商品数量是0 + ④PosKey长度在 [3~9] 之间;
tempPosKeyLeftHead = tmpPosKey.left(1);
if (tmpPosKey.contains("Default",Qt::CaseInsensitive) || (tempPosKeyLeftHead<QString('0') || tempPosKeyLeftHead>QString('9'))
|| !tmpQty || tmpPosKey.length()<3 || tmpPosKey.length()>9 ) {
error = QString::fromLocal8Bit("This Order Has PosKey Is Combo Error Or Default* Or qty Is Zore Or Sku Length < 3 Or Sku Length > 9");
QString requestType = orderObj->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
FlowControl::GetInstance()._AddOrUpdateReportOmsList(orderObj->id, orderObj->channel,requestType, QString("2"), QString(""), error, QString("1010"));
return false;
}
for ( int j = 0; j < dish->sub_products.count(); j++ ) {
dishesObject* subDish=dish->sub_products.at(j);
tmpPosKey = subDish->code;
tmpQty = subDish->qty;
tempPosKeyLeftHead = tmpPosKey.left(1);
// 检查子商品: ①允许子商品{code中含有Default字符串,不区分大小写} 属性: ①code中以非数字开头 + ②商品数量是0 + ③PosKey长度在 [3~9] 之间;
if( tmpPosKey.contains("Default",Qt::CaseInsensitive) ) {
continue;
} else {
if ( tempPosKeyLeftHead<QString('0') || tempPosKeyLeftHead>QString('9') || !tmpQty || tmpPosKey.length()<3 || tmpPosKey.length()>9 ) {
error = QString::fromLocal8Bit("This Order SubProduct PosKey Is String And No Default* Or qty Is Zore Or Sku Length < 3 Or Sku Length > 9 ");
QString requestType = orderObj->orderStatus==6?QString::fromLocal8Bit("6"):QString::fromLocal8Bit("3");
FlowControl::GetInstance()._AddOrUpdateReportOmsList(orderObj->id, orderObj->channel,requestType, QString("2"), QString(""), error, QString("1011") );
return false;
}
}
}
}
return true;
}
bool PrintCupStickPosDB::insertDeliveryPackageAndPack(OrderObject* orderObj, const QString& posCheckNo){
bool insertPackRet = true ;
int insertPackPlaceHolderSeq = 0;
......
......@@ -40,7 +40,7 @@ public:
*参数:[1]订单对象指针 [2]小票号
*返回:true操作成功,false失败
**/
bool insertOrderProduct(OrderObject* orderObj, const QString& posCheckNo);
bool insertOrderProduct(OrderObject* orderObj, const QString& posCheckNo, bool &checkProductValidRet);
/**
*功能:插入订单 券 商品列表到pos本地数据库中;
......@@ -56,6 +56,15 @@ public:
**/
bool insertCouponSubProd(OrderObject* orderObj, const int mainProdIndex, QList<SingleProductObject*> &couponSubProdList, const QString& posCheckNo);
/**
*功能:检查券商品(含客制化) 数据有效性;
*参数:[1]
*返回: true:有效, false: 无效;
**/
bool checkCouponProdAllVaild(OrderObject* orderObj);
/**
*功能:插入订单 正常 商品列表到pos本地数据库中;
*参数:[1]订单对象指针 [2]小票号
......@@ -70,6 +79,15 @@ public:
**/
bool insertNormalSubProd(OrderObject* orderObj, const int mainProdIndex, QList<dishesObject*> &subProdList, const QString& posCheckNo);
/**
*功能:检查正常商品(含客制化) 数据有效性;
*参数:[1]
*返回: true:有效, false: 无效;
**/
bool checkNormalProdAllVaild(OrderObject* orderObj);
/**
*功能:插入订单 配送费+打包费+打包属性到pos本地数据库中;
*参数:[1] [2]
......
......@@ -16,7 +16,7 @@ PrintSumBillPosDB::PrintSumBillPosDB()
bool PrintSumBillPosDB::initPrintSumBillPosDB(){
//QString dbPath = QString(ConfigManage::Instance().databasePath());
bool bRet = false, bRet20 = false;
bool bRet = false, bRet20 = false, bRet21 = false;
bool bRetCheckColumn = false;
bool bRetChangeLength = false;
m_sqlDb = QSqlDatabase::addDatabase("QODBC","PrintSumBillPosDB"); //数据库驱动类型为SQL Server
......@@ -53,7 +53,10 @@ bool PrintSumBillPosDB::initPrintSumBillPosDB(){
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM TakeOut Plugin Version:2.2020.9.28 Begin Change Store Column Result: %1--->>>>]")
.arg(bRetChangeLength?1:0);
return (bRet && bRetCheckColumn && bRet20 && bRetChangeLength);
bRet21 = alterTablePrintSumBillPosDB21();
QLOG_INFO()<<QString::fromLocal8Bit("[<<<<---FM TakeOut Plugin Version:2.2021.8.2 Begin Add New Column Result: %1--->>>>]").arg(bRet21?1:0);
return (bRet && bRetCheckColumn && bRet20 && bRetChangeLength && bRet21 );
}
bool PrintSumBillPosDB::alterTablePrintSumBillPosDB() {
......@@ -525,12 +528,107 @@ bool PrintSumBillPosDB::alterTablePrintSumBillPosDB20() {
QLOG_INFO()<<"[<<<<---alterTablePrintSumBillPosDB::addSuccessNum = 26 --->>>>]";
return true;
} else {
QLOG_ERROR()<<"[<<<<---alterTablePrintSumBillPosDB::addSuccessNum<= 26 --->>>>]"<<addSuccessNum;
QLOG_ERROR()<<"[<<<<---alterTablePrintSumBillPosDB::addSuccessNum< 26 --->>>>]"<<addSuccessNum;
return false;
}
}
bool PrintSumBillPosDB::alterTablePrintSumBillPosDB21() {
QMutexLocker mutex(&m_mutex);
int addSuccessNum = 0;
QSqlQuery query(m_sqlDb);
QString selectsql;
if(!m_sqlDb.open()) {
QLOG_ERROR()<<"[<<<<---alterTablePrintSumBillPosDB21::SqlServer Database:Open Failed--->>>>]"<<m_sqlDb.lastError().text();
return false;
}
// Alter Table reserve16;
selectsql = "select * from syscolumns where id=object_id('tb_msr_customer_info') and name='reserve16'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table tb_msr_customer_info add reserve16 varchar(80) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_msr_customer_info reserve16 Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
// Alter Table reserve17;
selectsql = "select * from syscolumns where id=object_id('tb_msr_customer_info') and name='reserve17'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table tb_msr_customer_info add reserve17 varchar(80) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_msr_customer_info reserve17 Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
// Alter Table reserve18;
selectsql = "select * from syscolumns where id=object_id('tb_msr_customer_info') and name='reserve18'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table tb_msr_customer_info add reserve18 varchar(100) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_msr_customer_info reserve18 Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
// Alter Table reserve19;
selectsql = "select * from syscolumns where id=object_id('tb_msr_customer_info') and name='reserve19'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table tb_msr_customer_info add reserve19 varchar(100) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_msr_customer_info reserve19 Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
// Alter Table reserve20;
selectsql = "select * from syscolumns where id=object_id('tb_msr_customer_info') and name='reserve20'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table tb_msr_customer_info add reserve20 varchar(150) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_msr_customer_info reserve20 Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
// Alter Table reserve21;
selectsql = "select * from syscolumns where id=object_id('tb_msr_customer_info') and name='reserve21'";
query.exec(selectsql);
if(!query.next()){
selectsql = "alter table tb_msr_customer_info add reserve21 varchar(150) null ";
if(!query.exec(selectsql)){
QLOG_ERROR()<< "[<<<<---alter table tb_msr_customer_info reserve21 Faild--->>>>]" <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
// Alter Table reserve22 ~ reserve40;
for ( int index = 22 ; index < 41 ; index++) {
selectsql = QString("select * from syscolumns where id=object_id('tb_msr_customer_info') and name='reserve%1'").arg(index);
query.exec(selectsql);
if(!query.next()){
selectsql = QString("alter table tb_msr_customer_info add reserve%1 int null ").arg(index);
if(!query.exec(selectsql)){
QLOG_ERROR()<< QString("[<<<<---alter table tb_msr_customer_info reserve%1 Faild--->>>>]").arg(index) <<query.lastError().text()<<QString::number(query.lastError().type());
} else { addSuccessNum++; }
} else { addSuccessNum++;}
}
m_sqlDb.close();
if (25 == addSuccessNum) {
QLOG_INFO()<<"[<<<<---alterTablePrintSumBillPosDB21::addSuccessNum = 25 --->>>>]";
return true;
} else {
QLOG_ERROR()<<"[<<<<---alterTablePrintSumBillPosDB21::addSuccessNum< 25 --->>>>]"<<addSuccessNum;
return false;
}
}
bool PrintSumBillPosDB::alterTablePrintSumBillPosDBLength(){
QMutexLocker mutex(&m_mutex);
int changeSuccessNum = 0;
......@@ -749,9 +847,9 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
" appointed_time, appointed_remindTemplate, order_type, channel, platform_source,"
" 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 ) "
" pluginVersion, packageSku, thirdPartyOrderId, discountShopFee, packFee, packDiscount, deliveryFee, deliveryDiscount, reserve22 ) "
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?, ?, ?, "
" ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" );
" ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" );
query.addBindValue(posCheckNo.toInt()); // --小票号
query.addBindValue(orderObj->lastName); // --顾客-姓
query.addBindValue(orderObj->consigneeName); // --顾客-全名
......@@ -850,6 +948,7 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
query.addBindValue(orderObj->deliveryPrice); // 配送费;
query.addBindValue(orderObj->deliveryDiscount); // 配送费折扣;
}
query.addBindValue(orderObj->extendType); // 扩展类型: 20:四轮车(履约方式);
QLOG_INFO()<<QString("[<<<--PrintSumBillPosDB::insertOrderSumBill waybillId:%1-->>>>]").arg((orderObj->waybillId).length()?orderObj->waybillId:QString("0"));
......@@ -864,10 +963,10 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
" appointed_time, appointed_remindTemplate, order_type, channel, platform_source,"
" 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 ) "
" pluginVersion, packageSku, thirdPartyOrderId, discountShopFee, packFee, packDiscount, deliveryFee, deliveryDiscount, reserve22 ) "
"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 )")
" %43, %44, %45, %46, %47, %48, %49, %50,%51, %52, %53, %54, %55, %56, %57, %58 )")
.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("")
......@@ -883,14 +982,14 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
.arg(orderObj->storeName).arg(orderObj->storeAddress).arg(orderObj->isPackage).arg(orderObj->orderDiscount).arg(orderObj->totalPrice)
.arg(0).arg(orderObj->sbkAppPayType).arg(orderObj->sbkAppPayValue).arg(orderObj->sbkAppRefundPayValue).arg(orderObj->thirdPartyBatch)
.arg("").arg(APP_VERSION).arg(orderObj->packageSku).arg(orderObj->thirdPartyOrderId).arg(0).arg(orderObj->packageFee)
.arg(orderObj->packDiscount).arg(orderObj->deliveryPrice).arg(orderObj->deliveryDiscount);
.arg(orderObj->packDiscount).arg(orderObj->deliveryPrice).arg(orderObj->deliveryDiscount).arg(orderObj->extendType);
} else {
QLOG_INFO()<<QString("[<<<<---SqlServer Database:Insert OrderId %1 Into tb_msr_customer_info Success--->>>>]").arg(orderObj->id);
result = true;
}
// 订单解耦前需入机订单 && 订单状态为取消 && 预约订单时,需要更新 该订单在tb_msr_customer_info表中全部记录的订单状态;
if ( orderObj->decouplePosVersion < 20 && OrderObject::Refunded ==orderObj->orderStatus && ( 7 == orderObj->orderType || 11 == orderObj->orderType ) ) {
if ( OrderObject::Refunded ==orderObj->orderStatus && ( 7 == orderObj->orderType || 11 == orderObj->orderType ) ) {
QSqlQuery updateQuery(m_sqlDb);
// 销售单存 1 记录(自定义组装 小票号); 退货时 也会存 1 记录(自定义组装 小票号); 该订单号将会出现两个退货记录 且 小票号还不一致
// 2021-04-11 存在此类潜在Bug(在入口添加 仅 解耦前会有此逻辑): 预约单退货场景[或许删除 销售单记录 会避免此类问题];
......
......@@ -52,6 +52,14 @@ public:
bool alterTablePrintSumBillPosDB20();
/**
*功能:新增pos本地数据库打印小票信息表中字段;
*参数:[无]
*返回:true:新增成功,false:新增字段失败
**/
bool alterTablePrintSumBillPosDB21();
/**
*功能:变更pos本地数据库打印小票信息表中 store_name store_address 两个字段 长度;
*参数:[无]
*返回:true: 变更成功,false: 变更失败
......
......@@ -101,6 +101,8 @@ class OrderObject : public QObject
Q_PROPERTY (int globalServiceType READ getGlobalServiceType WRITE setGlobalServiceType)
Q_PROPERTY (int globalOrderType READ getGlobalOrderType WRITE setGlobalOrderType)
Q_PROPERTY (int extendType READ getExtendType WRITE setExtendType)
public:
OrderObject(QObject *parent=0)
:QObject(parent){}
......@@ -215,6 +217,7 @@ public:
int globalServiceType; // 全链路服务类型: globalServiceType【新增字段:int】
int globalOrderType; // 全链路订单类型: globalOrderType 【新增字段:int】
int extendType; // 20 四轮车(履约方式的一种)
int forwardPosStatus; // 正向单入机状态: 0:未知 1: 成功 2:失败;
int negativePosStatus; // 负向单同上;
int deliveryStatus;
......@@ -494,6 +497,9 @@ public:
inline int getGlobalOrderType()const{return globalOrderType;}
inline void setGlobalOrderType(const int& v){globalOrderType = v;}
inline int getExtendType()const{return extendType;}
inline void setExtendType(const int& v){extendType = v;}
};
#endif // ORDEROBJECT_H
......@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 2,2021,7,12
PRODUCTVERSION 2,2021,7,12
FILEVERSION 2,2021,8,12
PRODUCTVERSION 2,2021,8,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.2021.7.12"
VALUE "FileVersion", "2.2021.7.12"
VALUE "ProductVersion", "2.2021.8.12"
VALUE "FileVersion", "2.2021.8.12"
//*************************************************************************//
END
END
......
......@@ -37,7 +37,7 @@
//#define APP_VERSION "2.2021.2.26"
//#define APP_VERSION "2.2021.4.19"
//#define APP_VERSION "2.2021.5.11"
#define APP_VERSION "2.2021.7.12"
#define APP_VERSION "2.2021.8.12"
//修正版本号时,切记修正 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